- SQLite 數(shù)據(jù)庫是支持事務(wù)的滑肉。
- 事務(wù)的特性可以保證讓某一系列的操作要么全部完成反肋,要么一個(gè)都不會(huì)完成拖云。
- 比如銀行轉(zhuǎn)賬贷笛,對方?jīng)]收款成功,則付款方也不能扣款成功宙项。
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.beginTransaction(); // 開啟事務(wù)
try {
db.delete("Book", null, null);
if (true) {
// 在這里手動(dòng)拋出一個(gè)異常乏苦,讓事務(wù)失敗
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(); // 事務(wù)已經(jīng)執(zhí)行成功
} catch (Exception e) {
e.printStackTrace();
} finally {
db.endTransaction(); // 結(jié)束事務(wù)
}
1. 開啟事務(wù)
db.beginTransaction(); // 開啟事務(wù)
2. 操作完成后設(shè)置事務(wù)成功
db.setTransactionSuccessful();
3. 關(guān)閉事務(wù)
db.endTransaction();
- 這里在捕獲異常的代碼塊中操作,并手動(dòng)拋出一個(gè)異常尤筐。
- 因?yàn)楫惓;慵觯聞?wù)沒有執(zhí)行成功,前面的刪除操作也不會(huì)成功盆繁。
- 去掉這個(gè)異常掀淘,刪除和添加操作都能成功。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者