现在的位置: 首页 > 综合 > 正文

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

2012年10月11日 ⁄ 综合 ⁄ 共 1420字 ⁄ 字号 评论关闭

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,表示对客户端的信任。

抱歉!评论已关闭.