0

我在我的项目中使用开源 CppSQLite 包装器来访问 SQLIte3 表,

我正在尝试将几个 sql 查询插入到 sqlite3 表中。如果任何插入查询失败,我需要回滚事务。

我的代码类似于以下内容:

    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 回答