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();//关闭事物
}
}
}
网友评论