数据库:事物操作

1.数据库的管理类

package com.biyu6.banktransfer;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyOpenHelper extends SQLiteOpenHelper {

    public MyOpenHelper(Context context) {
        super(context, "Account.db", null, 1);
        
    }

    @Override
    public void onCreate(SQLiteDatabase db) {//数据库第一次创建时调用
        //初始化表结构
        db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20),phone varchar(20),money varchar(20))");
        db.execSQL("insert into info ('name','phone','money') values ('张三','13888889999','1000')");
        db.execSQL("insert into info ('name','phone','money') values ('李四','15666667777','50000')");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}

2.事物操作

public class MainActivity extends Activity {

    private MyOpenHelper myOpenHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        myOpenHelper = new MyOpenHelper(getApplicationContext());
        
    }

    public void click(View v) {//点击按钮进行转账的事物逻辑
        SQLiteDatabase db = myOpenHelper.getReadableDatabase();
        //使用事物进行转账
        db.beginTransaction();//开启事物
        try {//尝试
            //实现转账的逻辑 实际上就是sql语句
            
            //给张三的钱减一百,给李四的钱加一百
            db.execSQL("update info set money = money - 100 where name=?",new Object[]{"张三"});
            
            //所谓事物,就是指要么同时成功,要么同时失败;如果在张三扣款后和李四到账前的这里出现了错误,那么张三的钱就不会被扣掉
            int i = 10/0;//模拟崩溃等异常---一旦出错,事物就会回滚,扣掉的就会还原

            db.execSQL("update info set money = money + 100 where name=?",new Object[]{"李四"});
            
            //给当前事物设置一个成功的标记
            db.setTransactionSuccessful();
            
        }catch (Exception e) {
            Toast.makeText(getApplicationContext(), "服务器忙,请稍后重试!", 1).show();
        } finally {//最后
            db.endTransaction();//关闭事物
        }
    }
}

你可能感兴趣的:(数据库:事物操作)