sqlite事务嵌套

本文探讨了SQLite数据库在事务嵌套上的限制,虽然SQLite不直接支持嵌套事务,但可以通过savepoint方法实现。同时,文章提出了一个适用于线程数据库连接的事务嵌套模式,特别指出在单线程环境中,可通过静态变量简化事务计数的管理。该方案利用Windows线程槽特性,确保每个线程拥有独立的事务状态。
摘要由CSDN通过智能技术生成

    sqlite本身的事务并不支持嵌套,而savepoint方法虽然支持嵌套,但是,使用起来比较复杂。下面,提供一种针对线程数据库连接的事务嵌套模式,如果是在单线程中操作数据库,则可以进一步简化实现 (采用静态变量保存事务计数即可)。

    在代码中,使用了windows下的线程槽的概念,其是针对每个线程保留单独的一份数据。

#include "sqlite3.h"
/**
 * @class LockHelp
 * @brief a lock class
 */
class CLockHelp
{
public:
 CLockHelp()
 {
  ::InitializeCriticalSection(&m_CriticalSection);
 }
 ~CLockHelp()
 {
  ::DeleteCriticalSection(&m_CriticalSection);
 }

 /// lock
 void lock()
 {
  ::EnterCriticalSection(&m_CriticalSection);
 }

 /// unlock
 void unlock()
 {
  ::LeaveCriticalSection(&m_CriticalSection);
 }
private:
 CLockHelp(const NLock&);
 CLockHelp& operator=(const NLock&);

private:
 CRITICAL_SECTION m_CriticalSection;
};

/**
 * @class CTransaction
 * 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值