※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

「libpqを使ったサンプル」の編集履歴(バックアップ)一覧に戻る

libpqを使ったサンプル - (2010/07/07 (水) 23:50:22) の1つ前との変更点

追加された行は青色になります

削除された行は赤色になります。

 **[[接続できない場合>URL]]
-
-PostgreSQL側では、dataフォルダの下の pg_hba.conf ファイルに以下のように設定を追加し、PostgreSQLを再起動する。ただし、psql などからアクセスして
- psql: fe_sendauth: authentication type 5 not supported
-のようなエラーが出るときは、md5 -> trust に変更する。
-
-# IPv4 local connections:
-host    all         all         127.0.0.1/32          md5
-host    all         all         192.168.0.3/32        trust
-
- この例は 192.168.0.3 からのアクセスのみを許可するように追加した場合である。もし 192.168.0.* から許可するなら、192.168.0.3/32 ではなく 192.168.0.0/24 とする。また 192.168.*.* から許可するなら、192.168.0.0/16 とする(このあたりの表記方法がわからなければ勉強が必要)。
-
- また、dataフォルダ下の postgresql.confファイルの listen_addresses行を以下のように localhost -> * に変更する(変更後は PostgreSQLを再起動)。
-# - Connection Settings -
-listen_addresses = 'localhost' -> '*'
-
- Excelなどから PostgreSQLサーバに ODBC接続する場合にも、同一ホストからでなければデフォルトではアクセスできないので上記の pg_hba.conf, postgresql.conf ファイルに追加する。
-
- PostgreSQLが動作しているサーバ機でファイアウォールソフトが動作しているときは、ポート5432番を開放すること。
-
 
 // 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;
 }