Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1326528
  • 博文数量: 436
  • 博客积分: 7854
  • 博客等级: 少将
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-18 16:30
文章分类

全部博文(436)

文章存档

2013年(2)

2012年(56)

2011年(70)

2010年(308)

分类:

2011-03-15 12:25:22

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 
#include "libpq-fe.h"

// 输出打印PGresult结果
void PQresultPrint(PGresult *res)
{
	int nFields = PQnfields(res);
	int nTuples = PQntuples(res);
	int i, j;
	for (i=0; iExecuteQuery(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,表示对客户端的信任。
阅读(911) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~