分类:
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; i 如果出现“数据库连接失败”,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,表示对客户端的信任。