このチュートリアルでは、PostgreSQLに接続するための公式のC++クライアントAPIであるlibpqxxライブラリを使用したC/C++によるPostgreSQLへの接続について説明します。libpqxxのソースコードはBSDライセンスの下で利用可能であり、自由にダウンロードしたり、他の人に渡したり、変更したり、販売したりすることができます。
取付
wget http://.org/download/software/libpqxx/libpqxx-...gz
tar xvfz libpqxx-4.0.tar.gz
cd libpqxx-4.0
./configure
make
make install
Getting Started with C/C++ PostgreSQLインタフェースで、PostgreSQLのインストールディレクトリを探し、pg_hba.confファイルに以下の行を追加してください:
# IPv4 local connections:
host all all .1/32 md5
Postgresサーバーが起動していない場合は、以下のコマンドで起動/再起動できます:
[root@host]# service postgresql restart
Stopping postgresql service: [ OK ]
Starting postgresql service:
C/C++ API
C/C++プログラムでPostgreSQLデータベースを扱うニーズを満たすために、以下の重要なインタフェースルーチンが用意されています。より複雑なアプリケーションを求めるのであれば、公式のlibpqxxドキュメントを参照するか、商用のAPIを使用してください。
データベースへの接続
以下のCコード・スニペットは、ローカル・マシンでポート5432を実行して既存のデータベースに接続する方法を示しています。この行は、ここではスラッシュで続けられています。
#include <iostream>
#include <pqxx/pqxx>
using namespace std;
using namespace pqxx;
int main(int argc, char* argv[])
{
try{
connection C("dbname=testdb user=postgres password=cohondob \
hostaddr=.1 port=5432");
if (C.is_open()) {
cout << "Opened database successfully: " << C.dbname() << endl;
} else {
cout << "Can't open database" << endl;
return 1;
}
C.disconnect ();
}catch (const std::exception &e){
cerr << e.what() << std::endl;
return 1;
}
}
では、ユーザーpostgresとパスワードpass123を使用して、データベースtestdbへの接続にアクセスするために、上記のプログラムをコンパイルして実行してみましょう。 ユーザーIDとパスワードには、データベース・ベースの設定を使用できます。lpqxxと-plqを指定された順序で使用し続けることを忘れないでください!そうしないと、リンカは "pq "で始まる関数名がないかどうかプロンプトを表示します。
$g++ test.cpp -lpqxx -lpq
$./a.out
Opened database successfully: testdb
#p#
テーブルの作成
次のCコード・スニペットは、以前に作成したデータベースにテーブルを作成するために使用されます:
#include <iostream>
#include <pqxx/pqxx>
using namespace std;
using namespace pqxx;
int main(int argc, char* argv[])
{
char * sql;
try{
connection C("dbname=testdb user=postgres password=cohondob \
hostaddr=.1 port=5432");
if (C.is_open()) {
cout << "Opened database successfully: " << C.dbname() << endl;
} else {
cout << "Can't open database" << endl;
return 1;
}
/* Create SQL statement */
sql = "CREATE TABLE COMPANY(" \
"ID INT PRIMARY KEY NOT NULL," \
"NAME TEXT NOT NULL," \
"AGE INT NOT NULL," \
"ADDRESS CHAR(50)," \
"SALARY REAL );";
/* Create a transactional object. */
work W(C);
/* Execute SQL query */
W.exec( sql );
W.commit();
cout << "Table created successfully" << endl;
C.disconnect ();
}catch (const std::exception &e){
cerr << e.what() << std::endl;
return 1;
}
return 0;
}
上記のプログラムがコンパイルされ実行されると、testdbデータベースにCOMPANYテーブルが作成され、以下のステートメントが表示されます:
Opened database successfully: testdb
Table created successfully
挿入操作
次のCコード・スニペットは、上記の例でCOMPANYテーブルのレコードを作成する方法を示しています:
#include <iostream>
#include <pqxx/pqxx>
using namespace std;
using namespace pqxx;
int main(int argc, char* argv[])
{
char * sql;
try{
connection C("dbname=testdb user=postgres password=cohondob \
hostaddr=.1 port=5432");
if (C.is_open()) {
cout << "Opened database successfully: " << C.dbname() << endl;
} else {
cout << "Can't open database" << endl;
return 1;
}
/* Create SQL statement */
sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
"VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
"VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";
/* Create a transactional object. */
work W(C);
/* Execute SQL query */
W.exec( sql );
W.commit();
cout << "Records created successfully" << endl;
C.disconnect ();
}catch (const std::exception &e){
cerr << e.what() << std::endl;
return 1;
}
return 0;
}
上記のプログラムをコンパイルして実行すると、COMPANYテーブルにレコードが作成され、以下の2行が表示されます:
Opened database successfully: testdb
Records created successfully





