黎活明8天快速掌握android视频教程--18_在SQLite中使用事务

1 所谓的事业就是一系列的操作

比如:执行转账操作:将personid=1的账户转账10元到personid=2的账号中

所以的一系列操作就是:personid=1的账户钱要减少10元

personid=2的账户钱要增加10元

这样这上面这两个过程都操作成功了,这个数据库转账这个事务才操作成功

 

使用事务操作注意下面的几点:

BEGIN TRANSACTION:开始事务处理。

COMMIT:保存更改,或者可以使用 END TRANSACTION 命令。

使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功,则所有从beginTransaction()开始的操作都会被提交,如果没有调用setTransactionSuccessful() 方法则回滚事务。

 

 注意下面几点:

1、使用SQLiteDatabase的beginTransaction()方法可以开启一个事务。

2、使用endTransaction()是结束一个事务,一个事务的结束分为两种方式,一种是commit正式提交、一种是rollback回滚的方式。执行endTransaction()到底是提交还是回滚由下面的方式决定,如果函数在执行endTransaction()之前调用了setTransactionSuccessful()说明业务执行成功,那就是提交,否则就是回滚。

3、所以setTransactionSuccessful()这个函数的执行一定要放在业务执行成功之后才调用,上面的就是放在两个db数据库业务操作的后面,如果db数据库发生异常就不会执行setTransactionSuccessful()这个函数,在finally中执行endTransaction()的时候发现没有调用setTransactionSuccessful()这个函数,说明业务操作失败,就采用回滚的方式相当的经典。

代码一定要按照下面的这个方式编写:

Java代码

 

代码如下:

 

//银行账户事务测试 

public void payment() 

{ 

    SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); 

    //开启事务 

    db.beginTransaction(); 

    try 

    { 

        db.execSQL("update person set amount=amount-10 where personid=?", new Object[]{1}); 

        db.execSQL("update person set amount=amount+10 where personid=?", new Object[]{2}); 

        //设置事务标志为成功,当结束事务时就会提交事务 

        db.setTransactionSuccessful(); 

    } 

   catch(Exception e){

        throw(e);

    }

    finally 

    { 

        //结束事务 

        db.endTransaction(); 

    } 

}

 

 

 

 

    

转载于:https://www.cnblogs.com/kebibuluan/p/6757693.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值