【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 }
【区别】

浙公网安备 33010602011771号