gpt4 book ai didi

c++ - 清除任何交易

转载 作者:行者123 更新时间:2023-11-30 05:19:25 25 4
gpt4 key购买 nike

我正在编写一些适用于 SQLite 数据库的 C++ 软件。

我的代码有一部分有很多潜在的分支和错误。我无法确保我的事务总是提交或回滚。

我只是想知道是否有任何方法可以说“如果正在进行事务,请将其回滚”。或者我可以做一个测试来确定交易是否有效?

我看不出有什么办法可以做到这一点,而且我确认在没有事务生效时执行 ROLLBACK 会导致错误。但我只是想问一下。

最佳答案

许多语言都有 try/finally 结构。C++ 没有,您必须将 RAII 与具有构造函数/析构函数的对象一起使用:

class Transaction {
sqlite3* db;
public Transaction(sqlite3* db): db(db)
{
sqlite3_exec(db, "BEGIN");
}
public ~Transaction()
{
if (success)
sqlite3_exec(db, "COMMIT");
else
sqlite3_exec(db, "ROLLBACK");
}
};

要确定交易是否成功,您可以使用类似于 Android 的 setTransactionSuccessful() 的函数。 (另请参见 beginTransaction())。

一点点错误处理会很有用(尤其是当您尝试提交时的 SQLITE_BUSY)。

(要实际检查显式事务是否处于事件状态,您可以使用 test for auto-commit mode ,但如果您有更好的方法来确保正确处理事务,则不应这样做。)

关于c++ - 清除任何交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41133925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com