我的應用程序由於使用JDBC而導致內存泄漏。我通過查看堆的可視轉儲並查看數以千計的ResultSet和關聯對象的實例來驗證這一點。那麼我的問題是,如何恰當地管理JDBC使用的資源,以便它們可以被垃圾收集?我是否需要爲每個使用的語句調用「.close()」?我需要在ResultSets上自己調用「.close()」嗎?正在發佈JDBC資源
你會如何釋放由呼叫使用的內存:
ResultSet rs = connection.createStatement().executeQuery("some sql query");
?
我看到還有其他非常相似的問題。道歉,如果這是多餘的,但要麼我不完全按照答案或他們似乎並不普遍適用。我正試圖在使用JDBC時如何管理內存方面取得權威性的回答。
::編輯::添加一些代碼樣本
我有一個類,基本上是我用來簡化數據庫交互的JDBC助手,主要的兩種方法執行插入或更新,以及執行選擇語句。
這一個用於執行INSERT或UPDATE語句:
public int executeCommand(String sqlCommand) throws SQLException {
if (connection == null || connection.isClosed()) {
sqlConnect();
}
Statement st = connection.createStatement();
int ret = st.executeUpdate(sqlCommand);
st.close();
return ret;
}
而這一次從一個SELECT返回結果集:
public ResultSet executeSelect(String select) throws SQLException {
if (connection == null || connection.isClosed()) {
sqlConnect();
}
ResultSet rs = connection.createStatement().executeQuery(select);
return rs;
}
使用的ExecuteSelect()方法後,我總是通話resultset.getStatement()。close()
使用顯示語句上的對象分配跟蹤檢查堆轉儲仍然保持從這兩種方法...
請務必關閉ResultSet和語句'嘗試{} finally'塊,都設置爲null。如果您添加了您使用的典型jdbc執行代碼,則使用這些代碼的代碼應位於代碼塊 – aishwarya
之內,如果您未發佈任何jdbc資源,對我們進行評論可能會更有幫助。 –