【0031】Android基础-18-数据库sqlite的操作之事务

【事务】事务: 执行多条sql语句,要么同时执行成功,要么同时执行失败,不能有的成功,有的失败

    银行转账:张三向李四转账200元,如果在扣了张三的200元,在钱没到账李四时,发生异常,则可能这200元会被银行扣走,发生异常;

 因此,出现了事务的概念;如果出现异常,200元会自动回滚到张三的账户中;

【MainActivity.java源码】

 1 package com.itheima.transtation;
 2 
 3 import com.itheima.transtation.db.BankOpenHelper;
 4 
 5 import android.os.Bundle;
 6 import android.app.Activity;
 7 import android.database.sqlite.SQLiteDatabase;
 8 import android.view.Menu;
 9 import android.view.View;
10 
11 public class MainActivity extends Activity {
12 
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.activity_main);
17     }
18 
19     //点击按钮执行该方法
20     public void transtation(View v){
21         //1.创建一个帮助类的对象
22         BankOpenHelper bankOpenHelper = new BankOpenHelper(this);
23         //2.调用数据库帮助类对象的getReadableDatabase创建数据库,初始化表数据,获取一个SqliteDatabase对象去做转账(sql语句)
24         SQLiteDatabase db = bankOpenHelper.getReadableDatabase();
25         //3.转账,将李四的钱减200,张三加200
26         db.beginTransaction();//开启一个数据库事务
27         try {
28             db.execSQL("update account set money= money-200 where name=?",new String[]{"李四"});
29             int i = 100/0;//模拟一个异常
30             db.execSQL("update account set money= money+200 where name=?",new String[]{"张三"});
31 
32             db.setTransactionSuccessful();//标记事务中的sql语句全部成功执行
33         } finally {
34             db.endTransaction();//判断事务的标记是否成功,如果不成功,回滚错误之前执行的sql语句 
35         }
36     }
37 
38 }

【BankOpenHelper.java源码】

 1 package com.itheima.transtation.db;
 2 
 3 import android.content.Context;
 4 import android.database.sqlite.SQLiteDatabase;
 5 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 6 import android.database.sqlite.SQLiteOpenHelper;
 7 
 8 public class BankOpenHelper extends SQLiteOpenHelper {
 9 
10     public BankOpenHelper(Context context) {
11         super(context, "bank.db", null, 1);
12         // TODO Auto-generated constructor stub
13     }
14 
15     @Override
16     public void onCreate(SQLiteDatabase db) {
17         
18         db.execSQL("create table account (_id integer primary key autoincrement,name varchar(20),money varchar(20))");
19         db.execSQL("insert into account ('name','money') values ('张三','2000')");
20         db.execSQL("insert into account ('name','money') values ('李四','5000')");
21 
22     }
23 
24     @Override
25     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
26         // TODO Auto-generated method stub
27 
28     }
29 
30 }

 【区别】

 

posted @ 2017-10-20 21:33  OzTaking  阅读(258)  评论(0)    收藏  举报