一位同事和我在處理從事務性JDBC代碼拋出的運行時異常的最佳實踐方面存在分歧。他認爲捕獲異常而不是SQLException是正確的做法。他的論點是Connection.close();如果事務沒有被提交,則具有未定義的行爲。一些JDBC實現可能會回滾,而另一些可能會提交。如果你只是捕獲SQLException,那麼任何運行時異常在finally塊的close()方法上都會有未定義的行爲。處理事務性jdbc代碼中的運行時異常
目前認爲是最佳做法,以趕上異常,如果不是,你如何解決他描述的情況?
Connection connection = null;
try {
connection = ...
// transactional code
} catch (final Exception e) {
connection.rollback();
} finally {
// close other resources
if (connection != null) { connection.close(); }
}