libpq程序例子
2024-08-24 23:19:50
程序:
[root@lex tst]# cat testlibpq.c
/*
* testlibpq.c
* Test the C version of LIBPQ, the POSTGRES frontend library.
*/
#include <stdio.h>
#include <stdlib.h>
#include "libpq-fe.h" static void
exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(EXIT_SUCCESS);
} int
main()
{
char *pghost,
*pgport,
*pgoptions,
*pgtty;
char *dbName;
int nFields;
int i,
j; #ifdef DEBUG
FILE *debug;
#endif /* DEBUG */ PGconn *conn;
PGresult *res; /*
* Begin by setting the parameters for a backend connection.
* If the parameters are NULL, the system tries to use
* reasonable defaults by looking up environment variables
* or, failing that, using hardwired constants.
*/ const char *conninfo="postgresql://postgres:postgres@localhost:5432/postgres"; /* make a connection to the database */
//conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
conn = PQconnectdb(conninfo); /* check to see that the backend connection was successfully made */
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
} #ifdef DEBUG
debug = fopen("/tmp/trace.out", "w");
PQtrace(conn, debug);
#endif /* DEBUG */ /* start a transaction block */
res = PQexec(conn, "BEGIN");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "BEGIN command failed\n");
PQclear(res);
exit_nicely(conn);
} /*
* should PQclear PGresult whenever it is no longer needed
* so as to avoid memory leaks
*/
PQclear(res); /*
* fetch instances from the pg_database, the system catalog of
* databases
*/
res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "DECLARE CURSOR command failed\n");
PQclear(res);
exit_nicely(conn);
}
PQclear(res); res = PQexec(conn, "FETCH ALL in myportal");
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr, "FETCH ALL command didn't return tuples properly\n");
PQclear(res);
exit_nicely(conn);
} /* first, print out the attribute names */
nFields = PQnfields(res);
for (i = ; i < nFields; i++)
printf("%-15s", PQfname(res, i)); printf("\n\n"); /* next, print out the instances */
for (i = ; i < PQntuples(res); i++)
{
for (j = ; j < nFields; j++)
printf("%-15s", PQgetvalue(res, i, j));
printf("\n");
} PQclear(res); /* close the portal */
res = PQexec(conn, "CLOSE myportal");
PQclear(res); /* end the transaction */
res = PQexec(conn, "END");
PQclear(res); /* close the connection to the database and cleanup */
PQfinish(conn); #ifdef DEBUG
fclose(debug);
#endif /* DEBUG */ return ;
}
[root@lex tst]#
编译和运行:
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
[root@lex tst]# gcc -c -I/usr/local/pgsql/include testlibpq.c
[root@lex tst]# gcc -o testlibpq testlibpq.o -L/usr/local/pgsql/lib -lpq
[root@lex tst]# ./testlibpq
datname datdba encoding datcollate datctype datistemplate datallowconn datconnlimit datlastsysoid datfrozenxid dattablespace datacl template1 en_US.UTF- en_US.UTF- t t - {=c/postgres,postgres=CTc/postgres}
template0 en_US.UTF- en_US.UTF- t f - {=c/postgres,postgres=CTc/postgres}
postgres en_US.UTF- en_US.UTF- f t -
[root@lex tst]#
最新文章
- 学习Google Protocol buffer之语法
- 如何卸除SDL TRADOS中的自开发插件
- 7、JavaScript总结——实现选项卡切换的效果
- 数据库批量修改表名,增加前缀(SQL server)
- 解决android sdk manage打开闪退的解决方法
- .Net缓存
- 自动注册 IIS6 的 MIME 类型
- 调用js中文乱码
- [Vani有约会]雨天的尾巴(树上差分+线段树合并)
- java的IO流的一些测试
- thymeleaf学习笔记:总结
- addEventListener.js
- HDU 4289 Control (网络流,最大流)
- mongodb常用操作命令(待续)
- Codeforces 349B - Color the Fence
- mysql通过mysqldump工具,对某个库下的表进行备份
- 希尔排序算法-python实现
- windows环境下ElasticSearch5以上版本安装head插件
- 创建image
- SCWS中文分词,安装说明(以:Win32环境、utf8字符集为例)