2
在以下代碼片段中,使用JDBC Connection和PreparedStatement進行Java 7異常處理?
1)在調用「conn.close()」(通過AutoClose)之前,try-catch塊是否自動調用「conn.rollback()」? 如果不是,我是否必須在該塊中添加finally { conn.rollback(); }
?
2)Connection對象傳遞給bar()方法的方式,它的try-catch方法是否正確?
public void foo() {
try (Connection conn = datasource.getConnection()) {
bar(conn, "arg");
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void bar(Connection conn, String args) throws SQLException {
try (PreparedStatement ps = conn.prepareStatement("SOME_QUERY")) {
// Do something
ps.executeUpdate();
} catch (SQLException err) {
throw err;
}
}
感謝anwer.sorry我忘了在foo()中添加commit()。bar()方法中創建的PreparedStatement何時關閉? –
在鏈接中說:「注意:try-with-resources語句可以像普通的try語句一樣捕獲並最終阻塞。在try-with-resources語句中,任何catch或finally塊都在資源聲明後運行已關閉。「那麼我應該在哪裏調用「conn.rollback()」?我在調用「conn.close()」後無法調用它,可以嗎? –
你說得對,我搞混了。但是,由於您無法訪問catch或finally塊中的嘗試(包括資源)中創建的對象,因此在這種特定情況下這並不相關。 (我刪除了我以前的評論,所以我不會混淆別人,鏈接是:http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) –