本地事務處理實例
public void transferAccount() {
Connection conn = null;
Statement stmt = null;
try{
conn = getDataSource().getConnection();
// 將自動提交設置爲 false,
//若設置爲 true 則數據庫將會把每一次數據更新認定爲一個事務並自動提交
conn.setAutoCommit(false);
stmt = conn.createStatement();
// 將 A 賬戶中的金額減少 500
stmt.execute("\
update t_account set amount = amount - 500 where account_id = 'A'");
// 將 B 賬戶中的金額增加 500
stmt.execute("\
update t_account set amount = amount + 500 where account_id = 'B'");
// 提交事務
conn.commit();
// 事務提交:轉賬的兩步操作同時成功
} catch(SQLException sqle){
try{
// 發生異常,回滾在本事務中的操做
conn.rollback();
// 事務回滾:轉賬的兩步操作完全撤銷
stmt.close();
conn.close();
}catch(Exception ignore){
}
sqle.printStackTrace();
}
}