• 每日日报


    Android中数据库事务介绍

        事务概念

                 在事务中包含的sql,要么同时执行成功 要么同时执行失败, 不能出现 部分成功部分失败的情况 典型案例 银行转账

         相关api

    1. db.beginTransaction();//开启事务
    2.   try {
    3.     ...
    4.     db.setTransactionSuccessful();//如果所有SQL都执行完毕则标记成功
    5.   } finally {
    6.     db.endTransaction();//如果有成功标记则关闭事务,没有成功标记回滚数据
    7.   }
     

         具体代码

    MyOpenHelper类
    1. public class MyOpenHelper extends SQLiteOpenHelper {
    2.    public MyOpenHelper(Context context) {
    3.        super(context, "Account.db", null, 1);
    4.    }
    5.    @Override
    6.    public void onCreate(SQLiteDatabase db) {
    7.        db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20),phone varchar(20),money varchar(20))");
    8.        db.execSQL("insert into info ('name','phone','money') values ('张三','138888','2000')");
    9.        db.execSQL("insert into info ('name','phone','money') values ('李四','139999','5000')");
    10.    }
    11.    @Override
    12.    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    13.    }
    14.}
     
    MainActivity类
    1. public class MainActivity extends Activity {
    2.    private MyOpenHelper openHelper;
    3.    @Override
    4.    protected void onCreate(Bundle savedInstanceState) {
    5.        super.onCreate(savedInstanceState);
    6.        setContentView(R.layout.activity_main);
    7.        //获取MyOpenHelper 用它可以获取SQLiteDatabase
    8.        openHelper = new MyOpenHelper(this);
    9.    }
    10.   public void transaction(View v){
    11.       SQLiteDatabase database = openHelper.getWritableDatabase();
    12.       //开启事务
    13.       database.beginTransaction();
    14.       try {
    15.           database.execSQL("update info set money= money-200 where name=?",new String[]{"张三"});
    16.            //int i = 100/0;
    17.           database.execSQL("update info set money= money+200 where name=?",new String[]{"李四"});
    18.           //事务所有的sql执行成功之后 调用  setTransactionSuccessful 会加上一个标记说明事务成功执行了
    19.           database.setTransactionSuccessful();
    20.           } catch (Exception e) {
    21.               Toast.makeText(getApplicationContext(), "服务器忙,请稍后再试", 0).show();
    22.        }finally {
    23.            //事务结束 会检查标记 如果没有成功标记则回滚 如果有成功标记则提交生效
    24.               database.endTransaction();
    25.           }
    26.   }
    27.}
     
  • 相关阅读:
    2015年5月1日 转载--各种变量在内存中的分布
    2015年4月30日 计算两个日期天数,写的代码
    2015年4月29日 dayofweek
    2015年4月28日
    2015年4月28日----高大上的数组,进制准换,最多是35进制
    2015年4月27日---C语言:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
    2015年4月27日
    《C++ Primer》学习笔记:迭代器介绍
    《C++ Primer》学习笔记:3.3.3其他vector操作
    《C++ Primer》学习笔记:向vector对象添加元素蕴含的编程假定
  • 原文地址:https://www.cnblogs.com/zhukaile/p/14836104.html
Copyright © 2020-2023  润新知