Итак, я пытаюсь реорганизовать некоторый код, который создает объекты JDBC в цикле и не закрывает их чисто. Моя первая мысль - создать LinkedList
для хранения подготовленных операторов, наборов результатов и т. Д., А затем закрыть их в цикле внутри блока finally
. Итак, подход такой:
Connection conn = null;
LinkedList<PreparedStatement> statements = new LinkedList<PreparedStatement>();
LinkedList<ResultSet> results = new LinkedList<ResultSet>();
try {
conn = database.getConnection();
for (String i : arr1) {
for (String j : arr2) {
Statement stmt = conn.createStatement();
statements.add(stmt);
ResultSet rs = stmt.executeQuery(...);
results.add(rs);
// ...work...
}
}
}
catch(SQLException ex) {ex.printStackTrace();}
finally {
// close all result sets..
for (ResultSet rs : (ResultSet[])results.toArray()) {
if (rs != null) try { rs.close(); } catch (SQLException ex) {ex.printStackTrace();}
}
for (Statement stmt : (Statement[])statements.toArray()) {
if (stmt != null) try { stmt.close(); } catch (SQLException ex) {ex.printStackTrace();}
}
if (conn != null) try { conn.close(); } catch (SQLException ex) {ex.printStackTrace();}
}
Это разумный подход? Будет ли это в конечном итоге вызвать утечку или проблемы? Заранее спасибо, и, пожалуйста, дайте мне знать, если это относится к codereview.se или где-то еще.