如何使用C ++在SQLite3数据库上实现回滚事务

时间:2012-10-04 21:16:59

标签: c++ visual-c++ sqlite

我在项目中使用开源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

1 个答案:

答案 0 :(得分:0)

如果execDML在发生错误时抛出异常,则可以使用异常处理程序:

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

如果没有,则必须为execDML编写一个包装函数,用于检查返回码并执行抛出。但是,看来CppSQLite已经为你做了这个。