linux下C语言编程3-连接PostgreSQL

PostgreSQL开发了libpq库,可供C语言编写外部程序以连接PG数据库。

在C程序中,开头需要加载libpq库,#include "libpq-fe.h"即可,注意是引号。

编译这个程序:

gcc -I/usr/local/pgsql/include -o pq PQresult.c -L/usr/local/pgsql/lib -lpq

-I/usr/local/pgsql/include是PG安装后的include目录。

-L/usr/local/pgsql/lib 是PG安装后的lib目录。

下面给出一个完整的例子:

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

// 输出打印PGresult结果
void PQresultPrint(PGresult *res)
{
	int nFields = PQnfields(res);
	int nTuples = PQntuples(res);
	int i, j;
	for (i=0; i<nTuples; i++)
	{
		for (j=0; j<nFields; j++)
		{
			printf("%s ", PQgetvalue(res, i, j));
		}
		printf("/n");
	}
}


// 编译命令:
// gcc -I/usr/local/pgsql/include -o pq PQresult.c -L/usr/local/pgsql/lib -lpq
PGresult *ExecuteQuery(char *host, int port, char *dbname, char *query)
{

	PGconn *conn;
	PGresult *res;
	
	char str[128];
	sprintf(str, "host=%s port=%d dbname=%s", host, port, dbname);
	
	// 建立连接
	conn = PQconnectdb(str);
	if(PQstatus(conn) == CONNECTION_BAD)
	{
		fprintf(stderr,"数据库连接失败! host: %s/n", host);
		fprintf(stderr,"%s",PQerrorMessage(conn));
	}
	
	// 执行SQL
	res = PQexec(conn, query);
	if (PQresultStatus(res) == PGRES_FATAL_ERROR)
	{
		fprintf(stderr, "%s", PQerrorMessage(conn));
	}
	
	// 命令语句:CREATE, UPDATE, DELETE等
	if (PQresultStatus(res) == PGRES_COMMAND_OK)
	{
		printf("%s/n", PQcmdTuples(res));
	}
	
	// SELECT SQL
	if (PQresultStatus(res) == PGRES_TUPLES_OK)
	{

	}
	
	PQfinish(conn);
	return res;
}

int main()
{
	char *sql = "SELECT * FROM student;";
	PGresult *res = ExecuteQuery("127.0.0.1", 5432, "test", sql);
	PQresultPrint(res);
	PQclear(res);
	return 0;
}

如果出现“数据库连接失败”,
1)要检查客户端(程序)与服务端(数据库)网络是否相通,ping命令即可。
2)服务端存储数据的目录里有个文件pg_hba.conf,可在里面仿照最后几句添加客户端的IP,表示对客户端的信任。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值