libpqを使ったサンプル

接続できない場合



"stdafx.h"
<stdio.h>
<stdlib.h>
<string.h>
"libpq-fe.h"

static void
exit_nicely(PGconn *conn)
{
   PQfinish(conn);
   exit(1);
}

int _tmain(int argc, _TCHAR* argv[])
{
	const char *conninfo;
   PGconn     *conn;
   PGresult   *res;
   int         nFields, nrows;
   int         i, j;
char buff[1024];

/* データベースとの接続を確立する */
conninfo = "host=localhost dbname=Test user=postgres port=5432";
   conn = PQconnectdb(conninfo);

   /* バックエンドとの接続確立に成功したかを確認する */
   if (PQstatus(conn) != CONNECTION_OK)
   {
       fprintf(stderr, "Connection to database failed: %s",
               PQerrorMessage(conn));
       exit_nicely(conn);
   }

 /* トランザクションブロックを開始する。 */
   res = PQexec(conn, "BEGIN");

   if (PQresultStatus(res) != PGRES_COMMAND_OK)
   {
       fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn));
       PQclear(res);
       exit_nicely(conn);
   }

   /*
    * 不要になったら、メモリリークを防ぐためにPGresultをPQclearすべき。
    */
   PQclear(res);

//sprintf(buff,"select * from config_table where id =%d",id);
sprintf(buff,"select * from config_table");

res = PQexec(conn, buff);
   if (PQresultStatus(res) != PGRES_TUPLES_OK)
   {
       fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn));
       PQclear(res);
       exit_nicely(conn);
   }

   /* まず属性名を表示する。 */
   nFields = PQnfields(res);//要素の数を取得
nrows = PQntuples(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;
}

最終更新:2010年07月07日 23:53