使用事务

  • 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();
  • 这里在捕获异常的代码块中操作,并手动抛出一个异常。
  • 因为异常,事务没有执行成功,前面的删除操作也不会成功。
  • 去掉这个异常,删除和添加操作都能成功。

你可能感兴趣的:(使用事务)