Всегда .Вам необходимо приобрести и закрыть их в кратчайшем объеме 1004 *, чтобы избежать утечки ресурсов, проблем с транзакциями и исчерпанных пулов соединений.Невыполнение этого требования приведет к тому, что в БД рано или поздно закончатся ресурсы, что приведет к исключениям типа «Слишком много соединений».
Обычная идиома JDBC следующая: все ресурсы и открываются в одном и том же блоке try-with-resources :
public List<Entity> list() throws SQLException {
List<Entity> entities = new ArrayList<Entity>();
try (
Connection connection = database.getConnection();
PreparedStatement statement = connection.prepareStatement(SQL_LIST);
ResultSet resultSet = statement.executeQuery();
) {
while (resultSet.next()) {
entities.add(map(resultSet));
}
}
return entities;
}
Или когда вы еще не в Java 7:
public List<Entity> list() throws SQLException {
List<Entity> entities = new ArrayList<Entity>();
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
connection = database.getConnection();
statement = connection.prepareStatement(SQL_LIST);
resultSet = statement.executeQuery();
while (resultSet.next()) {
entities.add(map(resultSet));
}
} finally {
if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
}
return entities;
}
Использование PreparedStatement
даст вам преимущество кэширования операторов в БД (рядом с предотвращением внедрения SQL при правильном использовании).Получение и закрытие соединения является самой дорогой задачей, но там для этого изобретены пулы соединений.Если вы хотите повторно использовать тот же оператор для массовых вставок / обновлений, вы можете использовать пакеты.
См. Также: