libpq简介

一、简介
Libpq 是应用程序员使用 HGDB 的 C 接口。libpq 是一个库函数的集合,它们允许客户端程序传递查询给 HGDB 后端服务器并且接收这些查询的结果。
libpq库是PostgreSQL的C接口。它是一组库函数,允许客户端程序与PostgreSQL交互。它也是其他PostgreSQL应用程序接口的基础引擎,包括为C++、Perl、PHP、Ruby、Python和Tcl编写的应用程序接口。
Libpq可能大家以前没有接触甚至没有听说,那么其实他和jdbc是一个东西,JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。要在特定数据库中使用JDBC,我们需要该数据库的JDBC驱动程序。
注意:使用 libpq 的客户端程序必须包括头文件 libpq-fe.h 并必须与 libpq 库链接在一起。
二、用途
简单地说,Libpq 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。下列代码段给出了以上三步的基本示例:

#include <stdio.h>  
#include <stdlib.h>  
#include <libpq-fe.h>  

void do_exit(PGconn *conn) {  

    PQfinish(conn);  
    exit(1);  
}  

int main() {  
//连接数据库,给出字符串
    PGconn *conn = PQconnectdb("user=highgo dbname=highgo password=highgo123");  
//返回链接信息
    if (PQstatus(conn) == CONNECTION_BAD) {  

        fprintf(stderr, "Connection to database failed: %s\n",  
            PQerrorMessage(conn));  
        do_exit(conn);  
}  
else{
	printf(‘连接成功’);
}
//获取数据表结果
    PGresult *res = PQexec(conn, "SELECT * FROM Cars LIMIT 5");      

if (PQresultStatus(res) != PGRES_TUPLES_OK) {  

    printf("No data retrieved\n");          
    PQclear(res);  
    do_exit(conn);  
    }      
//将查询结果输出
    int rows = PQntuples(res);  

    for(int i=0; i<rows; i++) {  

        printf("%s %s %s\n", PQgetvalue(res, i, 0),   
            PQgetvalue(res, i, 1), PQgetvalue(res, i, 2));  
    }      

    PQclear(res);  
    PQfinish(conn);  

    return 0;  
}  

三、增删改查示例
这是我们对数据库进行的最基本的也是最多的操作,下面给到每一个例子以及用到的函数分析。

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

int main(void)
{
//连接数据库
		const char* 
conninfo="host=localhost user=highgo  dbname=highgo  password=ls123456";
			PGconn* conn=PQconnectdb(conninfo);
   			if(PQstatus(conn)==CONNECTION_BAD)
					{
						printf("failed to connect database!");
							PQfinish(conn);
							return 1;
}
//创建表,插入数
PGresult *res=PQexec(conn,"create table student (id int,name text)");
if(PQresultStatus(res)!=PGRES_COMMAND_OK){
printf("create failed!%s \n",PQresultErrorMessage(res));
}
PQclear(res);
res=PQexec(conn,"insert into student values(1,'hanjingyi')");
if(PQresultStatus(res)!=PGRES_COMMAND_OK){
printf("insert failed!\n");
}
PQclear(res);
res=PQexec(conn,"insert into student values(2,'liushun')");
if(PQresultStatus(res)!=PGRES_COMMAND_OK){
printf("insert failed\n!");
}
PQclear(res);
//查询操作
res=PQexec(conn,"SELECT * FROM student");
	if(PQresultStatus(res)!=PGRES_TUPLES_OK)
	{
		printf("SELECT failed!");
		PQresultErrorMessage(res);
		PQclear(res);
		return 1;
	}
	int i=PQntuples(res);
	int t=PQnfields(res);
           int s=0;
//循环取值
	for(;s<i;s++)
	{
                int k=0;
		for(;k<t;k++)
		{
			printf(%s %s \n”,PQgetvalue(res,s,k));			
		}

	}
	PQclear(res);
//删除操作
res=PQexec(conn,"DELETE FROM student WHERE id=3");
	if(PQresultStatus(res)!=PGRES_COMMAND_OK)
	{
		printf("DELETE executed failed!%s,\n",PQresultErrorMessage(res));
		PQresultErrorMessage(res);
		PQclear(res);
		return 1;
	}
	else
	{
	        printf("DELETE operation executed succeed!\n");
		PQclear(res);
	}
 
	return 0;
}

四、一些常用函数
Pqconnectdb 创建一个数据库连接
PGresult 封装查询的结果
PQexec()提交了一个sql命令到服务器然后等待结果。
PQresultStatus 返回该命令的结果状态。PGRES_COMMAND_OK一个不返回数据的命令成功完成。 PGRES_TUPLES_OK 一个返回数据的命令(例如 SELECT 或者 SHOW)成功完成。
PQntuples 返回查询结果中的行(元组)数。
PQnfields 返回查询结果中每一行的列(域)数。
PQgetvalue 返回一个 PGresult 的一行的单一域值。
PQclear 释放与一个 PGresult 相关的存储。每一个命令结果不再需要时应该用 PQclear 释放。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值