/*
* PgConnector.cpp
*
* Created on: 2012-9-12
* Author: Gabriel
*/
#include "db/PgConnector.h"
#include <stdio.h>
#include <stdlib.h>
#include "libpq-fe.h"
namespace gaby {
PgConnector::PgConnector() {
}
PgConnector::~PgConnector() {
}
} /* namespace gaby */
int main( int argc,
char **argv) {
const char *conninfo = "dbname=mvmdb";
PGconn *conn;
PGresult *res;
int nFields;
int i, j;
/* Make a connection to the database */
conn = PQconnectdb(conninfo);
/* 检查后端连接成功建立 */
if (PQstatus(conn) != CONNECTION_OK) {
fprintf(stderr, "Connection to database failed: %s",
PQerrorMessage(conn));
PQfinish(conn);
return -1;
}
/*
* 我们的测试实例涉及游标的使用,这个时候我们必须使用事务块
* 我们可以把全部事情放在一个 "select * from pg_database"
* PQexec() 里,不过那样太简单了,不是个好例子。
*/
/* 开始一个事务块 */
res = PQexec(conn, "BEGIN");
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
return -1;
}
/*
* 应该在结果不需要的时候 PQclear PGresult,以避免内存泄漏
*/
PQclear(res);
//fprintf(stderr, "测试输出错误: %s", PQerrorMessage(conn));
/*
* 从系统表 pg_database 里抓取数据
*/
res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database");
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
return -1;
}
PQclear(res);
res = PQexec(conn, "FETCH ALL in myportal");
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
return -1;
}
/* 首先,打印属性名称 */
nFields = PQnfields(res);
for (i = 0; i < nFields; i++)
printf("%-15s", PQfname(res, i));
printf("\n\n");
/* 然后打印行 */
for (i = 0; i < PQntuples(res); i++) {
for (j = 0; j < nFields; j++)
printf("%-15s", PQgetvalue(res, i, j));
printf("\n");
}
PQclear(res);
/* 关闭游标 ... 我们不用检查错误 ... */
res = PQexec(conn, "CLOSE myportal");
PQclear(res);
/* 结束事务 */
res = PQexec(conn, "END");
PQclear(res);
/* 关闭数据库连接并清理 */
PQfinish(conn);
return 0;
}
经过测试,可以用
工程设置:
include : .....\postgresql-9.1.1-1-windows-binaries\include
lib: -lpg