Linux下PostgresQL数据库C语言接口:libpq (二)数据库访问
来源:互联网 发布:苹果鼠标怎么连接mac 编辑:程序博客网 时间:2024/05/01 11:50
转载请注明本文出处,LeonidasFlames的blog ,链接:Linux下PostgreSQL数据库C语言接口:libpq (二)
二、libpq库下C语言程序对PostgreSQL的访问
首先看一个程序示例:
#include <iostream>#include <libpq-fe.h>using namespace std;int main(void){////////////数据库连接const char* conninfo="hostaddr=127.0.0.1 user=Meme dbname=MyDatabase password=123";PGconn* conn=PQconnectdb(conninfo);if(PQstatus(conn)==CONNECTION_BAD){cout<<"连接数据库失败!"<<endl;PQfinish(conn);return 1;}////////////数据库SELECT查询PGresult* res=PQexec(conn,"SELECT *FROM student");if(PQresultStatus(res)!=PGRES_TUPLES_OK){cout<<"SELECT查询失败!"<<endl;cout<<PQresultErrorMessage(res)<<endl;PQclear(res);return 1;}int i=PQntuples(res);int t=PQnfields(res);for(int s=0;s<i;s++){for(int k=0;k<t;k++){cout<<PQgetvalue(res,s,k);cout<<" ";}cout<<endl;}PQclear(res);/////////////数据库DELETE操作res=PQexec(conn,"DELETE FROM student WHERE id=1001");if(PQresultStatus(res)!=PGRES_COMMAND_OK){cout<<"DELETE语句执行失败!"<<endl;cout<<PQresultErrorMessage(res)<<endl;PQclear(res);return 1;}else{cout<<"DELETE语句执行成功!"<<endl;PQclear(res);}return 0;}
1. 执行SQL语句函数
PGresult* PQexec(PGconn*conn, const char* query);返回查询的结果集
2.执行SQl语句函数,用于异步查询,可以得到多次查询结果
PQsendQuery(PQconn*conn, const char* query);
PQresult*res=PQgetResult(PQconn* );
3. 返回查询结果里的记录个数
int PQntuples(const PGresult*res);
4.返回记录里的字段个数
int PQnfields(const PGresult* res);
5.返回结果集中的某一字段名
char* PQfname(const PGresult* res, intfield_index);
6.返回结果集中的某一字段数据类型
Qid PQftype(const PGresult* res, intfield_index);
7. 返回结果集中的某一条记录中某一个字段的值
char* PQgetvalue(constPGresult* res, int tup_num, int field_num);
比如,您想取得结果集res的第2条记录的第3个字段,则
PQgetvalue(res,2,3); 即可,请注意,返回的值为char*类型,所以请注意数据的类型转换。如果期望的返回结果为int整型数据,则应该:
int value=atoi(PQgetvalue(res,2,3));
8. 返回命令的结果状态
ExecStatusType PQresultStatus( const PGresult * res);
ExecStatusType 类型定义为:
(1)PGRES_TUPLES_OK 成功执行查询,用于可以从res中提取元组信息的执行查询,如SELECT语句的结果判断。
(2)PGRES_COMMAND_OK 成功完成一个无数据命令,用于不返回元组信息的执行查询,如INSERT、UPDATE、DELETE等。
注意:PGRES_COMMAND_OK无法判断SQL语句在数据库中是否增删改数据。
比如:DELETE FROM tab_user WHERE id=1001如果未查询到id=1001的数据(可能是误操作,或者是id参数传参错误),则删除操作必然没有影响数据库实际数据,PQresultStatus返回的结果依然是PGRES_COMMAND_OK。
(3)PGRES_EMPTY_QUERY 发送给后端的字串为空
(4)PGRES_BAD_RESPONSE 服务器响应无法理解
9. 通常只返回命令的名字,可能包括额外的数据,如处理过的行数。可以用此来判断一个无数据返回的SQL命令是否生效。
char* PQcmdStatus(const PGresult* res);
比如一个UPDATE查询,可以通过PQcmdStatus的返回结果中的影响行数来判断,是否更新数据成功,这一点是不能用PQresultStatus函数分辨出的。
返回产生PGresult的SQL命令的命令状态字符串。
若UPDATE的影响行数为0,则应该返回的是”UPDATE 0”字符串。
10. 返回被SQL命令影响的行的数量
char* PQcmdTuples(const PGresult* res);
其中res指INSERT、UPDATE和DELETE命令返回涉及的行数,其他命令则返回空字符串。用途和上一条差不多,只是不返回命令名字,仅仅返回影响行数。
11. 用于返回访问的出错信息,比如一些操作违反了主键、外键、唯一约束等等。可以讲返回的char*数据打印以分析出错原因。
char* PQresultErrorMessage(PGresult* res);
12.返回一个错误字段标识符
char* PQresultErrorField(PGresult* res, intfieldcode);
13. 清除结果集PGresult*res的数据,res可以再次用于下一次查询。
void PQclear(PGresult *res);
- Linux下PostgresQL数据库C语言接口:libpq (二)数据库访问
- Linux下PostgresQL数据库C语言接口:libpq (一)数据库连接
- Linux下PostgresQL数据库C语言接口:libpq (三)控制事务
- postgresql libpq C语言网络库接口操作数据库例子
- postgresql libpq c接口 操作数据库例子
- C && PGSQL Linux下PostgresQL数据库C语言接口(转载)
- VS2010中c++程序调用PostgreSQL数据库C接口libpq.lib的项目Properties设置
- 数据库编程接口Libpq
- 数据库编程接口Libpq
- PostgreSQL数据库学习手册之libpq - C 库--介绍
- 数据库编程接口Libpq 2
- 数据库编程接口Libpq 3
- 访问PostgreSQL:C语言接口
- linux下libpq使用连接postgresql
- postgresql C++接口libpq
- Linux下用C语言访问MySQL数据库的程序
- 【Linux】Ubuntu下C语言访问MySQL数据库入门
- 【Linux】Ubuntu下C语言访问MySQL数据库入门
- Java ASM
- Apache Shiro 会话集群
- 关于perl中BEGIN和END的使用
- 设计模式重思考一
- 科学家证实“匹诺曹效应” 撒谎可致鼻子变热
- Linux下PostgresQL数据库C语言接口:libpq (二)数据库访问
- vs2010 + excel14 保存文件
- Linux ext2 ext3 ext4 比较
- 虚拟机修改时间
- 利用长尾关键字提高网站流量
- 完整介绍Geodatabase
- ubuntu 安装 Adobe Reader
- JAVA基础之理解JNI原理(java方式实现dll实例)
- IT领域最有可能外包的五个方面