Это признак неправильного закрытия / освобождения ресурсов JDBC. Вам нужно получить и , чтобы закрыть все ресурсы JDBC в кратчайшей возможной области, т.е. вам нужно закрыть их в обратном порядке в блоке finally
блока try
того же самого блока метода, что и Вы приобрели их. Э.Г.
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = database.getConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery(SQL);
// ...
} 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) {}
}
Если вы не закроете их должным образом как можно скорее, БД рано или поздно возьмет их в свои руки, и ваше приложение может рано или поздно сломаться, как вы столкнулись с собой.
Чтобы улучшить производительность соединения, используйте пул соединений - вам все равно нужно получить и закрыть их так же, как здесь, выше! Теперь это просто реализация пула соединений, которая под капотом беспокоится о том, что на самом деле закрывает соединение или нет.