「libpqを使ったサンプル」の編集履歴(バックアップ)一覧はこちら
「libpqを使ったサンプル」(2010/07/07 (水) 23:53:17) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
***[[接続できない場合>http://www35.atwiki.jp/space_escalator/pages/29.html]]
// OperetionPostgreSQL.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "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;
}
***[[接続できない場合>http://www35.atwiki.jp/space_escalator/pages/29.html]]
// OperetionPostgreSQL.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "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;
}
----