Chinaunix首页 | 论坛 | 博客
  • 博客访问: 971460
  • 博文数量: 120
  • 博客积分: 6454
  • 博客等级: 准将
  • 技术积分: 1739
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-28 17:45
文章分类

全部博文(120)

文章存档

2014年(1)

2013年(1)

2012年(11)

2011年(16)

2010年(6)

2009年(11)

2008年(30)

2007年(44)

分类:

2007-11-07 21:44:52

      编写libpq程序,首先要包含一个头文件

#include <libpq-fe.h>

     不包含这个头文件的话,就会有一些“变量未声明”的错误,比如:

'PGconn' undeclared (first use in this function)

     接下来就是编写代码了:

#include <libpq-fe.h>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
        char pConnString[256];
        sprintf(pConnString, "dbname=testdb user=postgresql password=");
        
        PGconn *conn;

        conn = PQconnectdb(pConnString);

        PGresult *res;
        
        if(PQstatus(conn)!=CONNECTION_OK)
        {
                cout<<"connect error!"<<endl;
                PQfinish(conn);
                return -1;
        }
        res = PQexec(conn, "select * from testtable");
        if(PQresultStatus(res) == PGRES_TUPLES_OK && PQntuples(res)>0)
        {
                cout<<"c_id is: "<<PQgetvalue(res, 0, 0)<<endl;
                cout<<"c_name is: "<<PQgetvalue(res, 0, 1)<<endl;
        }
        PQclear(res);
        PQfinish(conn);

        return 0;
}

     取个名叫test.cpp,开始编译链接吧:

g++ -I/usr/local/pgsql/include test.cpp -L/usr/local/pgsql/lib -lpq

     参数还真不少-_-! 还是一个一个的说明吧。

     1. -Idirectory 选项用来告诉编译器PostgreSQL头文件的安装位置,如果没有提供正确的选项就会出现错误:

libpq-fe.h: No such file or directory

     如果不清楚或不确定头文件放在什么地方,可以用pg_config来找到它:

$ pg_config --includedir

     2. -Ldirectory 选项用来告诉编译器libpq库所在的目录,如果你给错了目录位置或者根本没有给出,那下面的错误肯定会出现了:

cannot find -lpq

     同样也可以用pg_config找出库目录:

$ pg_config --libdir

     3. 声明选项 -lpq,这样就可以把libpq库链接进来,而如果没有链接,那么很有可能出现类似的错误:

undefined reference to `PQstatus'

     4. 最后一条:为了尽可能提高可移植性,应该把 -L 选项放在 -lpq 选项前面。

 

阅读(5269) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~