[pgsql-jp: 35571] libpqxx ライブラリを使用したトランザクション制御について
堀越
horihorikoshi @ yahoo.co.jp
2005年 6月 24日 (金) 14:39:34 JST
いつもお世話になります。
堀越と申します。
下記のようなループ中で複数のSQLを実行するようなC++のプロ
グラムにおいて、途中でsql_error例外が発生してしまうと、
それまでのSQLの実行がすべてabortされてしまいます。
例外を発生したSQLを実行してもトランザクションがabortされ
ずに、正常に通ったSQLの実行結果はテーブルに反映させるよ
うにするにはどのようにすれば良いのでしょうか?ループ内にwork
インスタンスの生成、破棄のロジックを入れて、ループのたび
にworkインスタンスを生成しなければならないのでしょうか?
いつも質問ばかりで申し訳ありませんが、宜しくお願いいたし
ます。
以下、プログラムソースです。
-----
void ExecSQL(&W,生成したSQL文字列){
try{
W.exec(生成したSQL文字列);
}catch(sql_error &e){
cerr << "SQL error: " << e.what() << endl
<< "Query was: '" << e.query() << "'" << endl;
}
}
int main()
{
try
{
ifstream fin(filename);
if(!fin){
cout << "入力ファイルを開けません。" << endl;
return 1;
}
// DBに接続する
connection C(接続文字列);
work W(C);
// EOFまでファイルを読み込んでSQL実行
while(省略){
※ここでSQLを生成
ExecSQL(W,生成したSQL文字列);
}
// コミット処理を実行し、ファイルクローズする
W.commit();
fin.close();
}
catch (const exception &e)
{
cerr << "Exception: " << e.what() << endl;
return 2;
}
catch (...)
{
// 上記に該当しない予期せぬエラー
cerr << "Unhandled exception" << endl;
return 100;
}
return 0;
}
__________________________________
Save the earth
http://pr.mail.yahoo.co.jp/ondanka/
pgsql-jp メーリングリストの案内