Android SQLite 事务

所谓事务,就是一系列的动作,要么都成功,要么都失败,即使有一个成功,那也是失败,即使只有一个失败,那也是失败

SQLite 事务 就是 SQLite 支持多条 SQL 语句一起按照提交的顺序执行,这个过程中如果有一条执行失败,那么就不会继续执行,而且之前已经执行的也不算数,就像从来没提交过任何语句一样

写在事务里的所有数据库操作都成功,事务提交,否则,事务回滚,就是回到前面的状态——未执行数据库操作的时候

Android 通常把事务写在文件 data/data/<包名>/database/ 目录下名为 xxx.db-journal

为什么要有事务

数据库是面向多个用户的,如果每个时刻只有一名用户在操作数据库其它用户需要等待

这很影响数据库资源的使用

但多个人并发访问又容易发生问题,比如 A 用户查询某种表时井没有找到 X

而在该用户还没完成操作之前;另一个用户插入了 X 项而 A 依旧认为没有 X

举个形象的例子

AB100 块那么 A 的存储要减 100 ,B 的存款也增加 100,两个条件要同时满足才能完成

完成交易(提交事务)

如果 B 账户的钱没有增加但是 A 已经扣了 100 块这样显然是不可以的

所以要把 A100 块返还给他就是恢复原样(事务回滚)

public void transaction() {

    SqliteDatabase db = dbOpenHelper.getwritableDatabase();

    // 开启事务
    db.begintransaction();

    try {

        db.execSQL("update person set amount amount -10 where personid =1");
        db.execSQL("update person set amount = amount +10");

        //设置事务标志为 true,表示提交事务
        db.settransactionSuccessful();
    } finally{

        //结束事务
        db.endtransaction();
    }
}

相关方法介绍

方法 说明
db.begintransaction() 开启事务
db.endTransaction() 结束事务

结束事务的结果有两种 事务回滚 或者 提交 ,而决定回滚还是提交决定与一个标记默认为 false,即回滚

所以想提交的话需要调 settransactionSuccessfu() 设置为 true

使用 finally块是为了避免某个语句执行发生错误导致程序的意外停止 后面结束事务的操作没执行

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.