不帶事務(wù)的代碼是這樣的(外層的try-catch已省略):
Connection conn = getConnection();
try {
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql1);
stmt.executeUpdate(sql2);
} finally {
conn.close();
}
如果要添加事務(wù),rollback在哪里調(diào)用?
如果在catch中調(diào)用,那么捕獲哪個異常?如果僅僅捕獲SQLException,那么拋出其它異常的時候怎么辦?如果捕獲Exception,那么拋出的異常目前沒法處理(例如RuntimeException)又怎么辦?
如果在finally中調(diào)用,我怎么區(qū)分正常和異常情況?
2 回答

哆啦的時光機(jī)
TA貢獻(xiàn)1779條經(jīng)驗 獲得超6個贊
try (Connection conn = null) {
conn.setAutoCommit(false);
try (Statement stmt = conn.createStatement()) {
stmt.executeUpdate(sql1);
stmt.executeUpdate(sql2);
conn.commit();
} catch (SQLException | RuntimeException e) {
e.printStackTrace();
conn.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
如果你覺得需要的話, 可以把RuntimeException
也rollback
了,但是上面的情況下,我覺得更應(yīng)該考慮為什么會拋出RuntimeException
。
添加回答
舉報
0/150
提交
取消