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

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

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

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

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

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

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

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();

    }

}
05-28 01:19