银行转账
1)update person set amount=amount-10 where personid=1;
2)update person set amount=amount+10 where personid=2;
以上个例子为基础,修改DBOpenHelper类,增加amount字段升级数据库
package cn.leigo.service;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBOpenHelper extends SQLiteOpenHelper {
public DBOpenHelper(Context context) {
super(context, "leigo.db", null, 3); //<包>/databases/
}
@Override
public void onCreate(SQLiteDatabase db) {// 数据库第一次被创建的时候调用的
db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE person ADD amount integer");
}
}
在Person类中增加amount变量:
package cn.leigo.domain;
public class Person {
private Integer id;
private String name;
private String phone;
private Integer amount;
public Person() {
}
public Person(String name, String phone, Integer amount) {
this.name = name;
this.phone = phone;
this.amount = amount;
}
public Person(Integer id, String name, String phone, Integer amount) {
this.id = id;
this.name = name;
this.phone = phone;
this.amount = amount;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Integer getAmount() {
return amount;
}
public void setAmount(Integer amount) {
this.amount = amount;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", phone=" + phone
+ ", amount=" + amount + "]";
}
}
修改报错的类
更新数据
public void testUpdateAmount() throws Exception {
PersonService service = new PersonService(getContext());
Person person1 = service.find(1);
Person person2 = service.find(2);
person1.setAmount(100);
person2.setAmount(50);
service.update(person1);
service.update(person2);
}
public void payment() {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
// 开启事务
db.beginTransaction();
db.execSQL("UPDATE person SET amount=amount-10 where personid=1");
//System.out.println(1/0);
db.execSQL("UPDATE person SET amount=amount+10 where personid=2");
db.setTransactionSuccessful();
// 结束事务,有两种情况:commit、rollback
// 事务的提交或者回滚是由事务的标识决定的,如果事务的标识为true,事务就会提交否则回滚,默认情况下事务的标识为false
db.endTransaction();
db.close();
}
public void testPayment() throws Exception {
PersonService service = new PersonService(getContext());
service.payment();
}
将
System.out.println(1/0);
前的注释去掉,重新测试,测试失败,数据未修改。