Закрыть в том же методе вы открываете, если это вообще возможно. Последовательное выполнение этого упрощает, чтобы разработчики и разработчики кода легко сортировали ресурсы (явно освобожденные, явно проблематичные, и нуждались в большем внимании).
Несколько другие ноты:
- Использование
try (...)
или сделать закрытие в finally
поэтому ресурс закрыт, даже если код, используя его не удается с исключением.
- Используйте аннотации
@WillClose
and @WillNotClose
, если необходимо, чтобы IDE и инструменты, такие как findbugs, могли указывать на проблемы.
public void mainTest(){
List<?> list;
try (ResultSet rs = pstmt.executeQuery(query)) {
list = populateRS(rs);
}
// work with list
}
public List<?> populateRS(@WillNotClose ResultSet rs){
//work with result set
}
или если вы застряли со старыми Java:
public void mainTest(){
List<?> list;
ResultSet rs = pstmt.executeQuery(query);
try {
list = populateRS(rs);
} finally {
if(rs!=null)rs.close();
}
// work with list
}
Так что я должен закрыть результирующий набор в mainTest не в populateRS.is это? public void mainTest() {ResultSet rs = pstmt.executeQuery (запрос); Список list = populateRS (rs); если (Rs = нуль!) rs.Close(); } public List populateRS (ResultSet rs) {// работа с набором результатов} – Jaque
Да, я думаю, что всегда проще (и менее подвержен ошибкам) создавать и закрывать 'ResultSet' одним методом и позволять любому другому методу позвоните, просто займитесь обработкой результатов сами (не беспокоясь об открытии, закрытии, проверке, если он уже открыт, ...). – andersschuller
, но в этом случае я исчерпал ошибку набора результатов. – Jaque