我是日本人。英語不熟練。對不起。 是否有一種方法可以從生成從Connection生成的Statement和ResultSet的方法的外部進行關閉?有沒有從生成從連接生成的Statement和ResultSet的方法的外部關閉的方法?
但是,我想要close()
這一個沒有調用Connection#close().
我從方法外部學習Connection的實例。
我是日本人。英語不熟練。對不起。 是否有一種方法可以從生成從Connection生成的Statement和ResultSet的方法的外部進行關閉?有沒有從生成從連接生成的Statement和ResultSet的方法的外部關閉的方法?
但是,我想要close()
這一個沒有調用Connection#close().
我從方法外部學習Connection的實例。
編號JDBC需要你自己(所有這些對象都在close
之內),並且在finally塊中能夠處理異常。
只關閉連接應該關閉從它派生出來的所有對象,但我不會依賴它,並且最好儘快關閉它。相反肯定是不正確的(關閉ResultSet將不會關閉連接),並且也無法從ResultSet獲取父Connection(我認爲這是您的問題的要點)。
我建議不要直接使用JDBC,而應該在頂部使用更友好的框架,至少像Commons DBUtils一樣,它會照顧清理這些資源。
當您打開任何連接或創建任何Statement/ResultSet明確關閉它們。 在完成JDBC代碼之後,總是嘗試調用此方法
public void closeResultSetAndStatement(final Connection connection,
final Statement statement, final ResultSet resultSet) {
try {
if (null != resultSet) {
resultSet.close();
}
} catch (Exception e) {
Log.warn(
"Exception while resultset statement. Not Throwing Exception, Ignoring it.",
e);
}
try {
if (null != statement) {
statement.close();
}
} catch (Exception e) {
Log.warn(
"Exception while closing statement. Not Throwing Exception, Ignoring it.",
e);
}
try {
if (null != connection) {
connection.close();
}
} catch (Exception e) {
Log.warn(
"Connection could not be closed. Not Throwing Exception, Ignoring it.",
e);
}
}
如果使用名爲lombok的庫,可以這樣做:import java.sql。*; import lombok.Cleanup; public class TEST {public static void main(String [] args)throws Exception {Connection conn = null; // Statement @Cleanup Statement cstmt = null; cstmt = conn.prepareCall(「{call 11111.22222(?, (); //執行cstmt.executeBatch(); //寫入文件代碼到這裏}}結果,因爲這個庫使用java6,所以我使用java5不能使用它,儘管close()會自動調用Statement。 – yohei
不管你使用的是Java6還是Java5,都不應該有任何問題 – BOSS
認爲不應該把涉及交叉關注問題的事情放在邏輯中只要有可能。 – yohei
我做了大量的方法。因此,如果通過使用像AOP這樣的技術來處理批處理調用close()的處理,那麼認爲質量是抵押的。 因此,現在使用Apache Commons進行替換存在相當大的風險。 – yohei
它不認爲AOP是一個很好的解決方案。管理數據庫連接不應該是「橫切關注點」,即分散在整個項目中。它應該集中在一小組課程中。你的「業務邏輯」(知道查詢的代碼)應該不需要混淆JDBC連接。 – Thilo