libpqを使ったサンプル

「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;
}
----