我在项目中使用开源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
答案 0 :(得分:0)
如果execDML
在发生错误时抛出异常,则可以使用异常处理程序:
db.execDML("begin");
try {
db.execDML("insert ...");
db.execDML("insert ...");
db.execDML("commit");
} catch (...) {
db.execDML("rollback");
throw;
}
如果没有,则必须为execDML
编写一个包装函数,用于检查返回码并执行抛出。但是,看来CppSQLite已经为你做了这个。