Android SQLite 支持嵌套事务吗?

Android SQLite相关java源码中多次提到支持 nested transaction。

而SQLite本身不支持嵌套事务,只能使用 savepoint 代替。 https://www.sqlite.org/lang_savepoint.html

嵌套事务即是类似于

BEGIN
     BEGIN
     ......

也许没有太多人会直接这样写,更多情况是,一个程序执行事务中调用了其他程序,而其他程序有自己的事务。

通过查看Android源码发现:

Android所谓的支持嵌套事务,只是屏蔽掉子事务的 begin end,只有最外层事务的begin end 有效。同时,子事务出错会导致整个嵌套事务出错,整个回滚。

当然,SQL SERVER好像也没有支持真正的嵌套事务,了解不太详细。

--------------------------------------------------------------------------------------

Android SQLite 关于嵌套事务的处理,均位于SqliteSession,多数数据库相关操作的调用流程均为 SQLiteDataBase --> SqliteSeesion --> SqliteConnectionPool --> SqliteConnection。稍后详细分析。只需知道,SQLiteDatabase.beginTransacion() 调用的是SQLiteSeesion.beginTransacion(),其他类似。如下

    public void beginTransaction() {
        beginTransaction(null, true);
    } 
    private void beginTransaction(SQLiteTransactionListener transactionListener, boolean exclusive) {
        acquireReference();
        try {
            getThreadSession().beginTransaction( //--- 获取线程session,开始事务
                    exclusive ? SQLiteSession.TRANSACTION_MODE_EXCLUSIVE :
                            SQLiteSession.TRANSACTION_MODE_IMMEDIATE,
                    transactionListener,
                    getThreadDefaultConnectionFlags(false /*readO
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值