我有一些代碼來更新數據庫表,看起來像有一個析構函數採取不同的行動取決於是否發生了異常
try
{
db.execute("BEGIN");
// Lots of DELETE and INSERT
db.execute("COMMIT");
}
catch (DBException&)
{
db.execute("ROLLBACK");
}
我想包在RAII類,所以我可以在交易邏輯只寫
{
DBTransaction trans(db);
// Lots of DELETE and INSERT
}
但我怎麼會寫它的析構函數?
+1這就是這樣的事情。但有一個問題:如果忘記調用commit()會怎麼樣? – sharptooth 2010-04-09 07:47:20
如果你忘記創建事務變量會怎麼樣?你無法防止所有的錯誤。 – 2010-04-09 08:12:36
@sharptooth:如果您忘記了首先想要做出的變更,該怎麼辦?我不認爲你可以做什麼來防止無能。 – jalf 2010-04-09 08:50:54