清除任何交易
Clear any transactions
我正在编写一些与sqlite数据库一起使用的C 软件。
我有一个代码的一个部分,其中有很多潜在的分支和错误。我很难确保我的交易始终是承诺或回滚。
我只是想知道是否有任何方法可以说"如果正在进行交易,那就回滚。"也许我可以进行测试以确定交易是否有效?
我看不到任何方法,我确认在没有交易的情况下执行回滚会导致错误。但是我只是以为我会问。
许多语言具有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");
}
};
要确定事务是否为 success
ful,您可以使用诸如Android的setTransactionsuccessful()之类的函数(另请参见begintransaction())。
和一些错误处理将是有用的(尤其是尝试提交时sqlite_busy)。
(要实际检查显式交易是否处于活动状态,您可以测试自动命令模式,但是如果您有更好的方法来确保交易正确处理。)
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何在不产生任何垃圾的情况下获得C中的像素
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- C++映射有2个键,这样任何1个键都可以用来获取值
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- RtlCaptureStackBackTrace未捕获任何帧
- 链表c++插入,所有情况都已检查,但没有任何工作
- C++模板函数,用于比较任何无符号整数和有符号整数
- Arduino millis() - millis() 怎么能等于 0 以外的任何东西?
- 尝试摆脱任何堆内存分配
- 是否有任何C++功能可以对地图进行排序?
- 打印时有二叉树问题.用户输入不打印任何内容
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 在C++行尾写一个分号或多个分号是否会改变任何内容
- C++类型特征,以查看是否可以<uint32_t>对类型"K"的任何变量调用"static_cast(k)"
- C++ 将 CIN 值存储到任何类型的数组中
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- GStreamer在开始任何播放之前进行搜索
- 清除任何交易