如何在C / C ++中提交SQLite事务?

时间:2010-05-21 07:03:11

标签: c++ sql c sqlite transactions

我正在使用sqlite c / c ++接口。

我有3个表(相关表)说A,B,C。现在,有一个名为 Set 的函数,它获取一些输入,并根据输入将行插入这三个表。 (有时它可以是其中一个表中的更新)

现在我需要两件事。一,我不想要自动提交功能。基本上我想在每1000次调用设置功能

之后提交

其次,在set函数本身内,如果我发现在插入两个表后,第三个插入失败,那么我必须还原, Set 函数调用中的那些特定更改。

现在我没有看到任何暴露的sqlite3_commit函数。我只看到一个名为sqlite3_commit_hook()的函数,它在文档中稍有不同。

是否为此目的公开了任何功能?或者实现这种行为的方法是什么?

你能帮助我做最好的方法。

2 个答案:

答案 0 :(得分:33)

您使用sqlite3_exec并分别通过“BEGIN TRANSACTION”和“END TRANSACTION”。

// 'db' is the pointer you got from sqlite3_open*
sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL);
// Any (modifying) SQL commands executed here are not committed until at the you call:
sqlite3_exec(db, "END TRANSACTION;", NULL, NULL, NULL);

这些SQL命令有同义词(例如COMMIT而不是END TRANSACTION)。作为参考,这是SQLite documentation for transactions

答案 1 :(得分:2)

你可以在C / C ++代码中使用BEGIN,COMMIT和ROLLBACK sql语句吗?