- SQLite 数据库是支持事务的。
- 事务的特性可以保证让某一系列的操作要么全部完成,要么一个都不会完成。
- 比如银行转账,对方没收款成功,则付款方也不能扣款成功。
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.beginTransaction(); // 开启事务
try {
db.delete("Book", null, null);
if (true) {
// 在这里手动抛出一个异常,让事务失败
throw new NullPointerException();
}
ContentValues values = new ContentValues();
values.put("name", "Game of Thrones");
values.put("author", "George Martin");
values.put("pages", 720);
values.put("price", 20.85);
db.insert("Book", null, values);
db.setTransactionSuccessful(); // 事务已经执行成功
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction(); // 结束事务
}
1. 开启事务
db.beginTransaction(); // 开启事务
2. 操作完成后设置事务成功
db.setTransactionSuccessful();
3. 关闭事务
db.endTransaction();
- 这里在捕获异常的代码块中操作,并手动抛出一个异常。
- 因为异常,事务没有执行成功,前面的删除操作也不会成功。
- 去掉这个异常,删除和添加操作都能成功。
网友评论