/* * 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