数据库编程接口Libpq

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

LibpqPostgreSQL提供的C语言数据库编程接口,用户可以使用LibpqAPI来访问数据库,开发应用程序。


1.1 数据库连接控制函数
应用程序在连接数据库时必须使用本节介绍的数据库连接控制函数。应用程序可以同时建立多个数据库连接,一个连接只能访问一个数据库中的数据。每个数据库连接用一个PGconn对象表示,函数PQconnectdb
PQsetdbLogin会返回一个PGconn对象。函数PQconnectdb
PQsetdbLogin总是返回一个非空的对象指针,除非整个内存都被耗尽,无法为PGconn对象分配存储空间。在向数据库发送SQL命令以前,可以用函数PQstatus检查是否成功地建立数据库连接。


PQconnectdb

建立一个新的数据库连接。


        PGconn *PQconnectdb(const char *conninfo);
这个函数使用参数conninfo中的信息建立一个新的数据库连接。conninfo中含有一个或多个参数的值, 每个参数的值用keyword = value的形式表示,keyword表示参数的名字,value表示参数的值,也可以省略keyword value之间的等号,不同的值用空格隔开。如果参数的值中含有空格或者值为空,则应该用双引号引起来,例如,keyword = 'a value'
。如果参数的值中含有单引号或反斜杠,则前面必须再加上一个反斜杠,例如,/'
//分别表示单引号和反斜杠。如果conninfo是一个空串,函数将会使用默认的参数连接数据库。


当前,conninfo支持下列参数:
host

运行数据库的主机的名字。如果它以反斜杠开始,则表示客户端想通过Unix-domain socket与数据库通信,它表示存放Unix-domain socket文件的目录。


hostaddr

运行数据库的主机的IP地址。可以是IPv4Ipv6。如果同时指定了参数hosthostaddr,参数host将被忽略。


port

数据库的端口。


dbname

数据库的名字。默认与用户名相同。


user

数据库用户的名字。默认与运行应用程序的操作系统用户相同。


password

数据库用户的密码。


connect_timeout

连接操作的最大的等待时间。如果超过了这个时间,连接仍然没有建立成功,则主动终止建立连接的操作。单位是秒,用十进制整数表示。0或不指定这个参数的值表示一值等待下去,直到连接建立成功。这个值应该不小于2秒钟。



sslmode

表示SSL的工作模式。一共有四种,分别是disableallowpreferrequire,默认值是requiredisable表示使用未加密的 SSL连接。allow先尝试使用非SSL连接,如果失败,再尝试使用SSL连接。prefer表示先尝试建立SSL连接,如果失败,再尝试建立非SSL连接。require只尝试建立SSL连接。sslmode对于使用Unix domain socket建立的连接没有没有任何作用,会被自动忽略。


PQfinish

关闭数据库连接,同时释放PGconn对象占有的内存。


        void PQfinish(PGconn *conn);
即使建立数据库连接的操作执行失败,应用程序也应该调用PQfinish来释放PGconn对象使用的内存。PQfinish执行结束以后,不应该再使用指针PGconn


PQreset

重置数据库连接。


        void PQreset(PGconn *conn);
这个函数会关闭数据库连接,然后使用上次建立数据库连接的参数尝试重新建立数据库连接。在数据库连接丢失以后,可以用这个函数来重新建立数据库连接。

 

 

 

1.2 连接状态函数

本节的函数用来查询数据库连接的状态。

PQdb
返回连接的数据库的名字。


char *PQdb(const PGconn *conn);
PQuser
返回建立连接的数据库用户名。


char *PQuser(const PGconn *conn);
PQpass
返回建立连接的数据库用户的密码。


char *PQpass(const PGconn *conn);
PQhost
返回数据库运行的主机名。

char *PQhost(const PGconn *conn);
PQport
返回数据库监听的端口。


char *PQport(const PGconn *conn);

PQstatus

返回连接的状态。

ConnStatusType PQstatus(const PGconn *conn);

它有两个取值,分别是CONNECTION_OKCONNECTION_BADCONNECTION_OK表示连接正常。CONNECTION_BAD表示连接已中断,在这种情况下,可以调用PQreset重新建立连接

PQtransactionStatus

返回指定的连接上正在执行的事务的状态。


PGTransactionStatusType PQtransactionStatus(const PGconn *conn);

PQTRANS_IDLE
表示连接处于空闲状态,没有执行任何事务。PQTRANS_ACTIVE
表示连接处于一个事务中,而且该事务正在执行命令。 PQTRANS_INTRANS
表示处于一个事务中,但事务处于空闲状态。PQTRANS_INERROR
表示处于一个事务中,但这个事务遇到错误,处于空闲状态,等待用户发一个COMMIT或ROLLBACK命令来结束它。
PQTRANS_UNKNOWN表示数据库连接已被终止。只有在用户发送了一个查询给数据库,而且这个查询仍然还在执行的情况下,才会返回PQTRANS_ACTIVE

PQparameterStatus
查询指定的连接上数据库参数的值。


const char *PQparameterStatus(const PGconn *conn, const char *paramName);

如果指定的参数不存在,返回NULL。


PQserverVersion
返回数据库的版本号。

int PQserverVersion(const PGconn *conn);

数据库版本号由三部分表示,分别是majorminorrevision编号,每个部分用两个十进制位表示。例如,对于8.1.5的数据库调用这个函数将返回80105,对于8.2的数据库调用这个函数将返回80200。如果连接以被终止,函数将返回0。

PQerrorMessage
返回指定的连接最近一次收到的数据库错误信息。

char *PQerrorMessage(const PGconn *conn);

不要释放该函数返回的字符串占有的内存空间,在相关的PGconn对象被释放时,错误消息占的存储空间会被自动释放。另外,系统会自动在错误消息的末尾加上一个换行符。

PQsocket
得到用来建立连接的socket的文件描述符(file descriptor)。合法的文件描述符必须大于或等于0。如果数据库连接没有被打开,函数将返回-1。

int PQsocket(const PGconn *conn);

PQbackendPID
返回执行这个连接发出的所有SQL命令的数据库 backend进程的进程ID。


int PQbackendPID(const PGconn *conn);

PQconnectionNeedsPassword
返回1表示需要提供数据库用户的密码才能建立数据库连接,但是没有提供密码。其它情况下,返回0.


int PQconnectionNeedsPassword(const PGconn *conn);

在建立连接的操作失败以后,应该调用这个函数决定是否需要提供数据库用户的密码。

PQconnectionUsedPassword


该函数检测连接数据库时,提供的数据库用户密码是否被使用。返回1表示密码被使用。返回0表示密码没有被使用。


int PQconnectionUsedPassword(const PGconn *conn);

PQgetssl
返回SSL类型的连接的SSL信息。如果不是SSL类型的连接,返回null。


SSL *PQgetssl(const PGconn *conn);

SSL信息包括加密级别、服务器证书等。详细信息参考OpenSSL文档。

 

 

1.3 执行命令的函数

   数据库连接成功地建立以后,可以用本节介绍的函数发送SQL命令给数据库执行。

 

1.3.1 主要的函数

PQexec

发送一个命令给数据库执行,然后等待命令执行结束。

         PGresult *PQexec(PGconn *conn, const char *command);
        

如果返回值是一个空指针,表示遇到了错误,调用PQerrorMessage可以得到详细的错误信息。

 

    可以在同一个命令字符串中包含多条SQL命令,不同的SQL命令用分号隔开。如果PQexec中的命令字符串含有多条命令,而且这些命令中没有BEGINCOMMIT这些命令将在同一个事务里面被执行,如果其中含有BEGINCOMMIT,则这些命令将在多个事务中被执行。只要有一条命令执行失败,剩下的命令就会被停止执行,返回的PGresult中包含相应的错误信息。

 

 

PQexecParams

发送一个命令给数据库执行,然后等待命令执行结束。这个函数可以执行带参数的SQL命令。

 

PGresult *PQexecParams(PGconn *conn,
                       const char *command,
                       int nParams,
                       const Oid *paramTypes,
                       const char * const *paramValues,
                       const int *paramLengths,
                       const int *paramFormats,
                       int resultFormat);

 

PQexecParamsPQexec类似,但它还具备其它的功能,包括SQL命令可以带有参数,指定查询结果用二进制或文本的格式表示。

 

该函数的参数如下:

conn

数据库连接对象。

 

command

被执行的SQL命令。如果里面含有参数,用$1, $2,…,$n表示。

 

nParams

被执行的SQL命令中含有的参数的个数。它也是数组paramTypes[]paramValues[]paramLengths[]paramFormats[]的长度,如果nParams的值是0,这些指针的值应该是NULL

 

paramTypes[]

指定SQL命令中对应的参数的数据类型,用OID表示。如果paramTypes是一个空指针或者数组paramTypes的某个元素的值是0,数据库会自动推断对应的参数的数据类型。

 

paramValues[]

指定SQL命令中对应的参数的值。如果这个数组中的某个元素的值是一个空指针,意思是对应的参数的值是null,否则对应的参数的值是这个指针指向的一个以/0终止的字符串(文本格式),或者是二进制数据(二进制格式)。

数据库编程接口Libpq 3 <br />.10 在多线程程序中使用libpq    libpq的函数是线程安全的,可以在多线程程序中使用libpq。但编译libpq共享库时,必须使用特殊的选项才能保证生成的libpq共享库是线程安全的。Libpq提供了一个特殊的函数PQisthreadsafe,应用程序可以调用这个函数确定自己使用的libpq共享库是不是线程安全的。<br /><br /><br />PQisthreadsafe<br /><br />返回1表示libpq共享库是线程安全的,返回0表示libpq共享库不是线程安全的. 阅读详情

相关推荐

【0098】 libpq是什么?如何使用?

文章目录1. 什么是libpq1.1 libpq位置2. 如何使用 1. 什么是libpq libpq是一组C编写的PostgreSQL客户端API(即库函数),允许客户端程序将查询传递给PostgreSQL后端(postgres)服务器,并接收这些查询的结果。此外,它也是其它几个PostgreSQL应用程序接口的底层引擎,包括C++、Perl、Python、Tcl和ECPG编写的那些。 1.1 libpq位置 libpq函数库位于src/interfaces/libpq目录下,位于github上面的 此位

Postgres 数据库内核开发工程师 1309

【0012】 如何使用libpq库函数集合

文章目录1. libpq是什么?1.1 libpq哪里获取?1.1.1 libpq目录下文件列表1.2 如何使用libpq 1. libpq是什么?     libpq是一套使用C语言编写的以供(C)程序员访问PostgreSQL后端服务器的库函数集合。通过使用libpq库函数,使客户端能够像psql程序命令一样登录PostgreSQL数据库,并进行相关的系列操作,比如登录、验证、创建表、插入表数据、删除表、向服务端发送查询请求、接收响应请求等等。同时,libpq也是其他几个postgres应用程序接口的底

Postgres 数据库内核开发工程师 1035

数据库基础教程之基于LIBPQ库 访问、连接、操作postgreSQL

C++ 连接postgreSQL,并对数据库属性表增、删、改、查(基于libpq库)

weixin_43896283的博客 2755

PostgreSQL教程(三十七):客户端接口(一)之 libpq - C 库

一、数据库连接控制函数 下面的函数处理与PostgreSQL服务器联接的事情。 一个应用程序一次可以与多个服务器建立联接。 (这么做的原因之一是访问多于一个数据库。) 每个连接都是用一个从函数PQconnectdb、PQconnectdbParams或PQsetdbLogin获得的PGconn对象表示。 注意,这些函数总是返回一个非空的对象指针,除非存储器少得连个PGconn对象都分配不出来。在把查询发送给连接对象之前, 可以调用PQstatus函数来检查一下返回值看看连接是否成功。 警告:

mr~li的博客 3052

libpq简介

一、简介 Libpq 是应用程序员使用 HGDB 的 C 接口。libpq 是一个库函数的集合,它们允许客户端程序传递查询给 HGDB 后端服务器并且接收这些查询的结果。 libpq库是PostgreSQL的C接口。它是一组库函数,允许客户端程序与PostgreSQL交互。它也是其他PostgreSQL应用程序接口的基础引擎,包括为C++、Perl、PHP、Ruby、Python和Tcl编写的应用...

杀不死我的终将使我强大 6172

数据库编程接口Libpq 2

1.4 异步函数<br />    使用函数PQexec执行SQL命令很方便,但也有下面的缺点:<br />·         PQexec 必须等到发出的命令执行结束才会返回,如果命令执行的时间比较长,应用程序将长时间处于等待状态,不能响应用户的其它请求,降低了程序的交互性。    <br />·         PQexec如果一次执行多条命令,只有最后一条命令的PGresult才会被返回,前面的命令的PGresult会被丢弃。<br />    Libpq同时提供了异步函数来执行SQL命令,这些函数不

RTC hacker 2702

libpq-PostgreSQL客户端编程接口(一)----libpq中的数据库连接函数

PostgreSQL作为目前最优秀的跨平台的开源数据库,其介绍及优点这里不再赘述,它能让我以最快的速度忘记my*,ms*。libpq是PostgreSQL的C应用程序接口,它允许客户程序向PostgreSQL服务器进程发送查询并获得查询结果。 我的实验环境是: 操作系统:Linux wheezy 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2 x...

weixin_33910385的博客 1191

第三十三章 libpq — C库

libpq为PostgreSQL的C应用程序编程接口libpq是可允许客户端向PostgreSQL后台进程发送查询并获取查询结果的一组库函数。本章末尾也有对于libpq的使用示例。源码的src/test/examples中也有几个使用libpq的完整示例。 使用libpq的客户端程序必须包含libpq-fe.h头文件,且必须连接到libpq库。 33.1数据库连接控制函数 以下函数用以处理与PostgreSQL后台进程的连接。每个链接由PGconn对象表示,其来自函数PQconnectdb,..

在路上 2096

PostgreSQL 12 文档: 部分 IV. 客户端接口

这一部分描述和PostgreSQL一起发布的客户端编程接口。这些章中的每一个都能被独立阅读。注意,还有很多用于客户端程序的其他编程接口是被独立发布的并且包含它们自己的文档(列出了一些很流行的)。这部份的读者应该熟悉使用SQL命令来操纵和查询数据库(见。),以及熟悉接口所使用的编程语言。

pger 的博客 235
上一篇: Asterisk 1.8 队列 分析
下一篇: 数据库编程接口Libpq 2
voipmaker
博客等级 码龄18年 1034粉丝 660原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值