循序渐进PostgreSQL: 学习pqxx C++ API访问(一)

2014-11-24 18:24:21 · 作者: · 浏览: 5

1. 简介


习惯了C++来开发的人,可能更倾向于使用c++库来访问PostgreSQL。libpqxx很早以前就推出了。目前已经到了4.0版。本文就简单的介绍如何使用它,Linux平台编译相对简单,这里就介绍一下Windows平台下的使用。


libpqxx的下载地址:直接上这里http://pqxx.org/development/libpqxx/wiki/DownloadPage


由于libpqxx对libpq的C-API进行了很好的封装,从而可以节省大量的编码时间。


2. 编译过程


将libpqxx解压到一固定目录。你需要提前编译好或安装好的客户端库,通常为了方便,这里假定你已经有一个PG的安装版或者解压缩版,在c:\pgsql里头。以PG9.x为例。


1. 进入libpqxx源码目录,备份并修改win32\common文件,将PGSQLSRC的值指向正确的地方:


这里是PGSQLSRC="c:\pgsql"


后边还有很多目录位置需要调整,针对我们这种情况,通常都是保留安装版本的设置,如:LIBPQINC=$(PGSQLSRC)\include, 而注释掉#LIBPQINC=$(PGSQLSRC)\interfaces\libpq, 其它几个值都如此类推。


2. 拷贝一些编译相关的头文件


针对具体版本,9.0的,将config\sample-headers\libpq\9.0\pqxx复制到include下边


针对VS2008的,将config\sample-headers\compiler\VisualStudio2008\pqxx复制到include目录下边, 如果是VS2005,以此类推。


3. 编译


program files->VS2008-->Visual studio tools->Visual Studio 2008 Command Prompt, 进入命令行, 在此进入libpqxx的源代码根目录,执行:


nmake /f win32\vc-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
"ObjDllRelease\binarystring.obj" "ObjDllRelease\connection.obj" "ObjDllRelea
se\connection_base.obj" "ObjDllRelease\cursor.obj" "ObjDllRelease\dbtransactio
n.obj" "ObjDllRelease\errorhandler.obj" "ObjDllRelease\except.obj" "ObjDllRel
ease\field.obj" "ObjDllRelease\largeobject.obj" "ObjDllRelease\nontransaction.
obj" "ObjDllRelease\notification.obj" "ObjDllRelease\notify-listen.obj" "ObjD
llRelease\pipeline.obj" "ObjDllRelease\prepared_statement.obj" "ObjDllRelease\
result.obj" "ObjDllRelease\robusttransaction.obj" "ObjDllRelease\statement_par
ameters.obj" "ObjDllRelease\strconv.obj" "ObjDllRelease\subtransaction.obj" "
ObjDllRelease\tablereader.obj" "ObjDllRelease\tablestream.obj" "ObjDllRelease\
tablewriter.obj" "ObjDllRelease\transaction.obj" "ObjDllRelease\transaction_ba
se.obj" "ObjDllRelease\tuple.obj" "ObjDllRelease\util.obj" "ObjDllRelease\lib
pqxx.obj" /out:"lib\libpqxx.dll" /implib:"lib\libpqxx.lib"
Creating library lib\libpqxx.lib and object lib\libpqxx.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


"ObjDllRelease\binarystring.obj" "ObjDllRelease\connection.obj" "ObjDllRelea


se\connection_base.obj" "ObjDllRelease\cursor.obj" "ObjDllRelease\dbtransactio


n.obj" "ObjDllRelease\errorhandler.obj" "ObjDllRelease\except.obj" "ObjDllRel


ease\field.obj" "ObjDllRelease\largeobject.obj" "ObjDllRelease\nontransaction.


obj" "ObjDllRelease\notification.obj" "ObjDllRelease\notify-listen.obj" "ObjD


llRelease\pipeline.obj" "ObjDllRelease\prepared_statement.obj" "ObjDllRelease\


result.obj" "ObjDllRelease\robusttransaction.obj" "ObjDllRelease\statement_par


ameters.obj" "ObjDllRelease\strconv.obj" "ObjDllRelease\subtransaction.obj" "


ObjDllRelease\tablereader.obj" "ObjDllRelease\tablestream.obj" "ObjDllRelease\


tablewriter.obj" "ObjDllRelease\transaction.obj" "ObjDllRelease\transaction_ba


se.obj" "ObjDllRelease\tuple.obj" "ObjDllRelease\util.obj" "ObjDllRelease\lib


pqxx.obj" /out:"lib\libp