循序渐进PostgreSQL: 学习pqxx C API访问
习惯了C 来开发的人,可能更倾向于使用c 库来访问PostgreSQL。libpqxx很早以前就推出了。目前已经到了4.0版。本文就简单的介绍
1. 简介
习惯了C 来开发的人,可能更倾向于使用c 库来访问PostgreSQL。libpqxx很早以前就推出了。目前已经到了4.0版。本文就简单的介绍如何使用它,,Linux平台编译相对简单,这里就介绍一下Windows平台下的使用。
libpqxx的下载地址:直接上这里
由于libpqxx对libpq的C-API进行了很好的封装,从而可以节省大量的编码时间。
2. 编译过程
将libpqxx解压到一固定目录。你需要提前编译好或安装好的客户端库,通常为了方便,这里假定你已经有一个PG的安装版或者解压缩版,在c:pgsql里头。以PG9.x为例。
1. 进入libpqxx源码目录,备份并修改win32common文件,将PGSQLSRC的值指向正确的地方:
这里是PGSQLSRC="c:pgsql"
后边还有很多目录位置需要调整,针对我们这种情况,通常都是保留安装版本的设置,如:LIBPQINC=$(PGSQLSRC)include, 而注释掉#LIBPQINC=$(PGSQLSRC)interfaceslibpq, 其它几个值都如此类推。
2. 拷贝一些编译相关的头文件
针对具体版本,9.0的,将configsample-headerslibpq9.0pqxx复制到include下边
针对VS2008的,将configsample-headerscompilerVisualStudio2008pqxx复制到include目录下边, 如果是VS2005,以此类推。
3. 编译
program files->VS2008-->Visual studio tools->Visual Studio 2008 Command Prompt, 进入命令行, 在此进入libpqxx的源代码根目录,执行:
nmake /f win32vc-libpqxx.mak ALL,
得到如下中间过程:
link.exe kernel32.lib ws2_32.lib advapi32.lib /nologo /dll /machine:I386
shell32.lib secur32.lib wldap32.lib /libpath:"C:hisql-x86-2.0.1"lib libpq.lib
"ObjDllReleasebinarystring.obj" "ObjDllReleaseconnection.obj" "ObjDllRelea
seconnection_base.obj" "ObjDllReleasecursor.obj" "ObjDllReleasedbtransactio
n.obj" "ObjDllReleaseerrorhandler.obj" "ObjDllReleaseexcept.obj" "ObjDllRel
easefield.obj" "ObjDllReleaselargeobject.obj" "ObjDllReleasenontransaction.
obj" "ObjDllReleasenotification.obj" "ObjDllReleasenotify-listen.obj" "ObjD
llReleasepipeline.obj" "ObjDllReleaseprepared_statement.obj" "ObjDllRelease
result.obj" "ObjDllReleaserobusttransaction.obj" "ObjDllReleasestatement_par
ameters.obj" "ObjDllReleasestrconv.obj" "ObjDllReleasesubtransaction.obj" "
ObjDllReleasetablereader.obj" "ObjDllReleasetablestream.obj" "ObjDllRelease
tablewriter.obj" "ObjDllReleasetransaction.obj" "ObjDllReleasetransaction_ba
se.obj" "ObjDllReleasetuple.obj" "ObjDllReleaseutil.obj" "ObjDllReleaselib
pqxx.obj" /out:"liblibpqxx.dll" /implib:"liblibpqxx.lib"
Creating library liblibpqxx.lib and object liblibpqxx.exp
[plain] view plaincopyprint?
link.exe kernel32.lib ws2_32.lib advapi32.lib /nologo /dll /machine:I386
shell32.lib secur32.lib wldap32.lib /libpath:"C:hisql-x86-2.0.1"lib libpq.lib
"ObjDllReleasebinarystring.obj" "ObjDllReleaseconnection.obj" "ObjDllRelea
seconnection_base.obj" "ObjDllReleasecursor.obj" "ObjDllReleasedbtransactio
n.obj" "ObjDllReleaseerrorhandler.obj" "ObjDllReleaseexcept.obj" "ObjDllRel
easefield.obj" "ObjDllReleaselargeobject.obj" "ObjDllReleasenontransaction.
obj" "ObjDllReleasenotification.obj" "ObjDllReleasenotify-listen.obj" "ObjD
llReleasepipeline.obj" "ObjDllReleaseprepared_statement.obj" "ObjDllRelease
result.obj" "ObjDllReleaserobusttransaction.obj" "ObjDllReleasestatement_par
ameters.obj" "ObjDllReleasestrconv.obj" "ObjDllReleasesubtransaction.obj" "
ObjDllReleasetablereader.obj" "ObjDllReleasetablestream.obj" "ObjDllRelease
tablewriter.obj" "ObjDllReleasetransaction.obj" "ObjDllReleasetransaction_ba
se.obj" "ObjDllReleasetuple.obj" "ObjDllReleaseutil.obj" "ObjDllReleaselib
pqxx.obj" /out:"liblibpqxx.dll" /implib:"liblibpqxx.lib"
Creating library liblibpqxx.lib and object liblibpqxx.exp
link.exe kernel32.lib ws2_32.lib advapi32.lib /nologo /dll /machine:I386
shell32.lib secur32.lib wldap32.lib /libpath:"C:hisql-x86-2.0.1"lib libpq.lib
“ObjDllReleasebinarystring.obj” “ObjDllReleaseconnection.obj” “ObjDllRelea
seconnection_base.obj" "ObjDllReleasecursor.obj" "ObjDllReleasdbtransactio
n.obj" "ObjDllReleaseerrorhandler.obj" "ObjDllRelease except.obj" "ObjDllRel
easefield.obj" "ObjDllReleaselargeobject.obj" "ObjDllReleasenontransaction。
obj" "ObjDllReleasenotification.obj" "ObjDllReleasenotify-listen.obj" "ObjD
llReleasepipeline.obj" "ObjDllReleaseprepared_statement.obj" "ObjDllRelease
结果.obj" "ObjDllReleaserobusttransaction.obj" "ObjDllReleasestatement_par
ameters.obj" "ObjDllReleasestrconv.obj" "ObjDllReleasesubtransaction.obj" "
ObjDllReleasetablereader.obj" "ObjDllReleasetablestream.obj" "ObjDllRelease
tablewriter.obj" "ObjDllReleasetransaction.obj" "ObjDllReleasetransaction_ba
se.obj" "ObjDllReleasetuple.obj" "ObjDllReleaseutil.obj" "ObjDllReleaselib
pqxx.obj" /out:"liblibpqxx.dll" /implib:"liblibpqxx.lib"
创建库 liblibpqxx.lib 和对象 liblibpqxx.exp 最终会在lib目录下生成:
[纯文本]查看纯文本?
D:Projectshisql.svntrunklearninglibpqxx-4.0>dir/b/s lib
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpq.dll
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpq.lib
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxx.dll
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxx.dll.manifest
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxx.exp
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxx.lib
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxxD.dll
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxxD.dll.manifest
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxxD.exp
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxxD.ilk
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxxD.lib
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxxD.pdb
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxx_static.lib
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxx_staticD.lib
D:Projectshisql.svntrunklearninglibpqxx-4.0libmsdia80.dll
D:Projectshisql.svntrunklearninglibpqxx-4.0>dir/b/s lib
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpq.dll
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpq.lib
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxx.dll
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxx.dll.manifest
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxx.exp
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxx.lib
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxxD.dll
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxxD.dll.manifest
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxxD.exp
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxxD.ilk
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxxD.lib
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxxD.pdb
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxx_static.lib
D:Projectshisql.svntrunklearninglibpqxx-4.0liblibpqxx_staticD.lib
D:Projectshisql.svntrunklearninglibpqxx-4.0libmsdia80.dll
下边来看看最简单的示例:
iihero=# 创建用户 foo 密码 'foo1';
创建角色
[sql] 查看 plaincopyprint?
iihero=>创建表 t(id int 主键, col2 varchar(32));
注意: CREATE TABLE / PRIMARY KEY 将要为表 "t" 创建隐含索引 "t_pkey"
创建表
iihero=>编码
GBK
iihero=> insert into t value(1 ,'不同类型的列表');
插入 0 1
iihero=>从 t 中选择*;
id | 列2
--------------------------------
1 | 不同类型的列表
(1行记录)
iihero=>创建表 t(id int 主键, col2 varchar(32));
注意: CREATE TABLE / PRIMARY KEY 将要为表 "t" 创建隐含索引 "t_pkey"
创建表
iihero=>编码
GBK
iihero=> insert into t value(1 ,'不同类型的列表');
插入 0 1
iihero=>从 t 中选择*;
id | 列2
--------------------------------
1 | 不同类型的列表
(1行记录)
将编译出来后的include、lib目录提取到固定的目录,和你原来的postgresql的include和lib目录,可以合到一起。给开发使用。
下边是一个最简单的示例:
[cpp] 查看纯文本?
#include <iostream> <p>#include <pqxx></pqxx></p> <p>int main()</p> <p>{</p> <p>pqxx::connection conn("dbname=iihero hostaddr=127.0.0.1 user=foo 密码=foo1" );</p> <p>if(conn.is_open())</p> <p>{</p> <p>std::cout </p> <p>std::cout </p> <p>}</p> <p>其他</p> <p>{</p> <p>std::cout </p> <p>}</p> <p>pqxx::work w(conn);</p> <p>pqxx::result res = w.exec("SELECT 1");</p> <p>w.commit();</p> <p>std::cout () </p> <p>}</p> <p>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

MySQL在Web应用中的主要作用是存储和管理数据。1.MySQL高效处理用户信息、产品目录和交易记录等数据。2.通过SQL查询,开发者能从数据库提取信息生成动态内容。3.MySQL基于客户端-服务器模型工作,确保查询速度可接受。

InnoDB使用redologs和undologs确保数据一致性和可靠性。1.redologs记录数据页修改,确保崩溃恢复和事务持久性。2.undologs记录数据原始值,支持事务回滚和MVCC。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。 MySQL以其高性能、可扩展性和跨平台支持着称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL索引基数对查询性能有显着影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

MySQL的基本操作包括创建数据库、表格,及使用SQL进行数据的CRUD操作。1.创建数据库:CREATEDATABASEmy_first_db;2.创建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入数据:INSERTINTObooks(title,author,published_year)VA

MySQL适合Web应用和内容管理系统,因其开源、高性能和易用性而受欢迎。1)与PostgreSQL相比,MySQL在简单查询和高并发读操作上表现更好。2)相较Oracle,MySQL因开源和低成本更受中小企业青睐。3)对比MicrosoftSQLServer,MySQL更适合跨平台应用。4)与MongoDB不同,MySQL更适用于结构化数据和事务处理。

InnoDBBufferPool通过缓存数据和索引页来减少磁盘I/O,提升数据库性能。其工作原理包括:1.数据读取:从BufferPool中读取数据;2.数据写入:修改数据后写入BufferPool并定期刷新到磁盘;3.缓存管理:使用LRU算法管理缓存页;4.预读机制:提前加载相邻数据页。通过调整BufferPool大小和使用多个实例,可以优化数据库性能。

MySQL通过表结构和SQL查询高效管理结构化数据,并通过外键实现表间关系。1.创建表时定义数据格式和类型。2.使用外键建立表间关系。3.通过索引和查询优化提高性能。4.定期备份和监控数据库确保数据安全和性能优化。
