访问PostgreSQL:C语言接口
来源:互联网 发布:淘宝开店卖什么 编辑:程序博客网 时间:2024/05/01 15:48
C语言接口
在与数据库连接方面,C语言是一种常用语言,许多数据库都是用C写的。该语言高效灵活,因此如果想要写一款客户端接口,不管是仅仅包含控制台还是基于GUI的,并且不想用到浏览器,C语言也许是最好的选择。
连接C语言与Postgres使用的库名为libpq,它与PostgreSQL源码树绑定在一起。如果安装数据库系统时使用的是二进制文件而不是从源码编译安装,libpq可被单独安装,但也要记得需要使用选项-dev package(或-devel,取决于Linux系统的版本)。在Debian及其分发版上,安装libpq的命令为 #aptitude install libpq-dev。在基于RedHat的系统上,如CentOS,可以在postgresqlxx-libs包中找到libpq,其中xx为主要和次要版本号。因此要连接到PostgreSQL 9.1数据库,如果使用Fedora16,则需要安装postgresql91-lib或postgresql-devel。由于RHEL/CentOS用户大多使用Postgres库,导致程序的名称可能会有一些不同,而且由于Fedora用户能够使用更多最新的包,因此仅仅在使用一个旧版本时才需要第三方库。简而言之,任何支持PostgreSQL的系统均有其可用的libpq。
除了C语言,libpq同时也是C++、Perl和Tcl的API引擎,提供基本的函数对数据库进行连接、查询和修改。许多常用的函数都包含“PQ”前缀,如PQconnectdb或PQerrormessage。更多示例可查看PostgreSQL文档或查看src/test/examples。在C程序文件中,包含libpq-fe.h头文件并在编译时添加相应的链接标记-lpq。
安装并设置好之后,要做的第一件事就是连接数据库。PQconnectdb()函数带一个char *conninfo格式的参数,参数格式如dbname=[database_name],当然也可以是其他内容,只要格式对即可,最常用的关键字为host,hostaddr(numeric格式,以避免无用的DNS查询),port,user,password与sslmode。如果不使用参数,则会使用默认选项。假设服务器地址为192.168.0.101,username为postgres,数据库名为testdb1,尝试连接数据库的代码如下所示:
#include <stdio.h>#include <libpq-fe.h>
int main(int argc,char* argv[])
{
const char *conninfo;
PGconn *conn;
if (argc > 1)
conninfo = argcv[1];
else
{
printf("Not enough arguments, exiting...");
return 1;
}
conn = PQconnectdb(conninfo);
/*Check to see how I did */
if(PQstatus(conn) == CONNECTION_OK)
printf("Connection succeeded.\n");
else
{
printf("Connection failed.\n");
}
}
linux下postgresql的c程序编译问题
linux下c程序使用postgresql 8.4连接数据库时编译出现的问题。
1.
问题:In function `main':
`PGconn' undeclared (first use in this function)
`PGresult' undeclared (first use in this function)
`CONNECTION_BAD' undeclared (first use in this function)
`PGRES_COMMAND_OK' undeclared (first use in this function)
`PGRES_TUPLES_OK' undeclared (first use in this function)
出现此问题,为缺少#include <libpq-fe.h>
2.
问题:libpq-fe.h: No such file or directory
解决:系统未查找到libpq-fe.h,需要指定其目录
方式1:gcc -c -I/usr/local/pgsql/include test.c
方式2:Makefile文件中,CPPFLAGS += -I/usr/local/pgsql/include
3.编译.c至.o通过,但链接时出现如下问题
undefined reference to `PQsetdbLogin'
undefined reference to `PQstatus'
undefined reference to `PQerrorMessage'
解决:此为缺少链接所需的库文件导致,需手动指定其目录
gcc -o test test1.o test2.o -L/usr/local/pgsql/lib -lpq
编译成功。
将代码保存为testlibpq并编译,编译后的程序用法如下:
如果不出错误,会在屏幕上看到提示“Connection succeeded.”,表示连接数据库成功,不过上文并没有什么实际用处。那么何为实际用处呢----对数据进行查询,但这里先介绍如何断开连接,即调用PQfinish,该函数只有一个参数PGconn *conn,并返回void。
PQexec函数执行查询,参数为PGconn *conn与const char *command,返回一个PGresult类型的对象。在如下示例中,声明一个PGresult变量,并向服务器发送一个命令。读者可自行编写检查连接与否以及错误处理的代码。
res = PQexec(conn, "SELECT * FROM mydatabase");
PQclear(res);
显然这段代码无法编译,只是为了向读者展示libpq库提供的功能,而不是直接提供可用代码。不过在这段代码中,res包含了查询结果,读者可以任意对其进行解析。PQresultStatus可以查询命令的状态,该函数返回PGRES_COMMAND_OK或 PGRES_FATAL_ERROR.。可在PostgreSQL项目页面找到exec函数的一个综合列表。
下面介绍一些有用的函数,例如,PQntuples函数将给定的res作为参数,以整数类型返回表中列的数量。如果查询的状态为PGRES_TUPLES_OK,则它以PGresult对象为参数,并返回一个整型值。PQnfields函数给出每行的列数。PQfname函数返回与某数字关联的列的名字,PQfnumber函数功能则完全相反。要得到某一单元的值,需要将PGresult以及单元的列号和行号传给PQgetvalue函数。
可以看到这些函数都比较简单,但PQexec不能同时处理多个SQL命令,因为该函数只能返回一个结构,如果有多个命令,则只能返回最后一个命令的结果。另一个不足是,PQexec在执行一个命令时会一直等到命令返回,因此读者在使用该命令遇到阻塞执行时要分外小心。如果这些不足影响到读者用户的使用,可以使用其它函数代替,如PQsendQuery和PQgetResult等,可使用这些函数来进行异步查询处理。
- 访问PostgreSQL:C语言接口
- 任意语言访问PostgreSQL:C语言接口
- Linux下PostgresQL数据库C语言接口:libpq (二)数据库访问
- postgresql libpq C语言网络库接口操作数据库例子
- C程序访问PostgreSQL数据库
- C && PGSQL Linux下PostgresQL数据库C语言接口(转载)
- 基于Oracle OCI的数据访问C语言接口ORADBI
- C语言访问INFORMIX数据库 — 接口实现
- 基于Oracle OCI的数据访问C语言接口ORADBI
- Linux下PostgresQL数据库C语言接口:libpq (一)数据库连接
- Linux下PostgresQL数据库C语言接口:libpq (三)控制事务
- PostgreSQL连接C/C++接口实例
- postgresql libpq c接口 操作数据库例子
- PostgreSQL连接C/C++接口实例
- PostgreSQL连接C/C++接口实例
- COM接口 C语言
- linux C语言接口
- SQLite C语言接口
- VS2005打包方法(安装和部署简介)
- vs中使用相对路径的问题
- 世界上最全的解酒方法
- 二分查找
- VB.NET中操作xml文件(插入节点、修改、删除)(转载)
- 访问PostgreSQL:C语言接口
- PS/2鼠标自己动手改USB接口
- <【麦当劳 肯德基】是美国在中国的基因武器试验场(转)>
- 如何快速找到可用代理
- BHOLocker删除办法
- 误删资料恢复
- windows CE5.0模拟器 可在PC上运行的WINDOWS CE5.0下载(转载)
- 一分钟清除你电脑中的垃圾,使你电脑急速如飞
- 猫言猫语