zoukankan      html  css  js  c++  java
  • 黎活明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(); 
    
        } 
    
    }

        

  • 相关阅读:
    【Tomcat】使用Eclipse发布项目时,项目启动路径错误。
    Unsupported major.minor version 52.0
    【转载】设置event.cancelBubble,使触发子元素的onclick不同时触发父元素的onclick
    【MG】测试
    【Tomcat】使用Eclipse运行Tomcat7源码
    【微信公众号】WeixinJSBridge.call('closeWindow')无效
    【微信公众号】使用a标签打开链接显示空白
    【JAVA】导出jar包时,Class files on classpath not found
    【JAVA】修改项目包名
    lesson3.1:java公平锁和非公平锁及读写锁
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/6757693.html
Copyright © 2011-2022 走看看