- 從池中獲取一個
Connection
閉幕資源(這可能會拋出異常) - 出連接的創建
Statement
(也可能會拋出異常) - 使用執行SQL查詢聲明並將其存儲在一個
ResultSet
(可以奉送) - 做的東西與查詢結果
- 關閉
ResultSet
(例外!) - 關閉
Statement
(例外!) - 關閉
Connection
(例外!)
看看這段代碼:可能會拋出異常
Connection conn = null;
Statement st = null;
ResultSet set = null;
try {
conn = Database.getConnection();
st = conn.createStatement();
set = st.executeQuery("SELECT * FROM THING");
// <-- Do stuff
} catch (Exception e) {
} finally {
// Close set if possible
if (set != null) {
try {
set.close();
} catch (Exception e) {
}
}
// Close statement if possible
if (st != null) {
try {
st.close();
} catch (Exception e) {
}
}
// Close connection if possible
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
}
}
}
的finally
塊是我收我的東西。正如你所看到的,它非常混亂。我的問題是:這是清理這些資源的正確方法嗎?
Guava的Closer可以模擬Java 6中的資源嘗試http://wil.boayue.com/blog/2013/09/13/java-7-automatic-resource-管理/ - 無數'closeQuietly(Closable)'方法可能有助於編寫短代碼段(儘管只是半正確的,因爲關閉資源時的異常可能意味着寫操作失敗,因此不應被忽略)。 – zapl 2014-12-01 21:12:31