SQLite C API: 运行 事务,响应错误
SQLite C API: running transaction, responding to errors
我是 SQLite 的新手,我只是想了解 运行ning 事务(使用 C API)。在这种情况下,我只需要 运行 对两个表进行两次一致的更新。
最简单的方法似乎是 this tutorial 中的方法。您只是 sqlite3_exec
一个组合的命令序列,以 BEGIN
开始并以 COMMIT
结束。所以,你永远不会做 ROLLBACK
,并且你可能依赖 SQLite 在遇到错误时自动回滚。
问题是 the manual 中关于处理事务错误的部分相当复杂,我看不出这是个好方法。该文档还建议手动回滚。
下一个方法是执行单个 BEGIN
,然后单独执行每个语句 运行,检查错误,最后 运行 一个 COMMIT
或ROLLBACK
。这实际上是更好的,还是只是忙于工作?
sqlite3_exec()
将在遇到第一个错误时中止,大多数错误不会导致自动回滚。
您应该先执行 BEGIN,然后执行事务中的所有操作,然后使用 COMMIT 或 ROLLBACK 结束事务。
在 ROLLBACK 的情况下,您可能会忽略任何错误。要么事务已经被回滚,要么你无能为力。
我是 SQLite 的新手,我只是想了解 运行ning 事务(使用 C API)。在这种情况下,我只需要 运行 对两个表进行两次一致的更新。
最简单的方法似乎是 this tutorial 中的方法。您只是 sqlite3_exec
一个组合的命令序列,以 BEGIN
开始并以 COMMIT
结束。所以,你永远不会做 ROLLBACK
,并且你可能依赖 SQLite 在遇到错误时自动回滚。
问题是 the manual 中关于处理事务错误的部分相当复杂,我看不出这是个好方法。该文档还建议手动回滚。
下一个方法是执行单个 BEGIN
,然后单独执行每个语句 运行,检查错误,最后 运行 一个 COMMIT
或ROLLBACK
。这实际上是更好的,还是只是忙于工作?
sqlite3_exec()
将在遇到第一个错误时中止,大多数错误不会导致自动回滚。
您应该先执行 BEGIN,然后执行事务中的所有操作,然后使用 COMMIT 或 ROLLBACK 结束事务。
在 ROLLBACK 的情况下,您可能会忽略任何错误。要么事务已经被回滚,要么你无能为力。