使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,
程序执行到endTransaction() 方法时会检查事务的标志是否为成功,
如果程序执行到endTransaction()之前调用了setTransactionSuccessful()方法设置事务的标志为成功则提交事务,
如果没有调用setTransactionSuccessful() 方法则回滚事务。
/**
* 转账
*/
public void payment(Integer subtractId, Integer addId) {
db = dbOpenHandler.getWritableDatabase();
String sqlAdd = "update person set amount = amount + 10 where personid=?";
String sqlSubtract = "update person set amount = amount - 10 where personid=?";
db.beginTransaction(); // 开启事务
try{
db.execSQL(sqlSubtract, new Object[]{subtractId});
db.execSQL(sqlAdd, new Object[]{addId});
db.setTransactionSuccessful(); // 在事务结束之前,设置事务标志为成功。必须手动设置。
} finally{
db.endTransaction(); // 结束事务, 若事务标志为成功,则提交事务。否则回滚事务。
}
}