0

プロジェクトでオープンソースの CppSQLite ラッパーを使用して、SQLIte3 テーブルにアクセスしています。

sqlite3 テーブルにいくつかの SQL クエリを挿入しようとしています。挿入クエリのいずれかが失敗した場合は、トランザクションをロールバックする必要があります。

次のような私のコード:

    CppSQLiteDB db;
    db.execDML(L"begin transaction;");
    db.execDML("insert into emp values (7, 'Test7');");
    db.execDML("insert into emp values (8, 'Test8');");
    db.execDML("insert into emp values (9, 'Test9');");
    db.execDML(L"commit transaction;");

挿入クエリのいずれかが失敗した場合、トランザクションをロールバックするにはどうすればよいですか。各挿入クエリのリターン コードを確認する必要がありますか?

参照: http://www.codeproject.com/Articles/6343/CppSQLite-C-Wrapper-for-SQLite

4

1 に答える 1

0

エラーが発生したときに例外をスローする場合execDMLは、例外ハンドラーを使用できます。

db.execDML("begin");
try {
    db.execDML("insert ...");
    db.execDML("insert ...");
    db.execDML("commit");
} catch (...) {
    db.execDML("rollback");
    throw;
}

そうでない場合はexecDML、戻りコードをチェックしてスローするラッパー関数を作成する必要があります。ただし、CppSQLiteはすでにこれを行っているようです。

于 2012-10-05T20:30:40.813 に答える