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

标签 c++ sql c sqlite transactions

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

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

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

后提交

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

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

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

你能帮我找到最好的方法吗?

最佳答案

您使用 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 .

关于c++ - 如何在 C/C++ 中提交 SQLite 事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2880149/

相关文章:

Visual Studio 和 Eclipse 中的 C++ 图形库

c++ - 这是 Clang 的错误还是我的错误?

sql - SQL Server 中行版本控制的时间戳与 Int 列

c - 是否保证指定的数组始终获得足够的空间?

c - 不同 header 中的结构相互引用

c - # 运算符在宏中有什么作用?

c++ - opencv中不扭曲的同心圆

c++ - CMake - 安装第三方 dll 依赖项

mysql - SQL子查询优化,如何先执行子查询

mysql - 仅在为空时选择