Я время от времени получаю следующее исключение:
com.ibm.db2.jcc.b.gm: [jcc][t4][2030][11211][3.50.152] ошибка связи произошел во время операций на базовом сокете соединения, входном потоке сокета или потоке вывода сокета. Ошибочное местоположение: Reply.fill (). Сообщение: Соединение сбрасывается. ERRORCODE =-4499, SQLSTATE=08001
Проблема состоит в том, что, код выполняется успешно в течение достаточно долгого времени, и затем внезапно я получаю это исключение. Однако это выполняет perfrectly, когда я выполняю код снова.
Мог кто-то говорить мне, что могло быть неправильным и предоставить мне некоторые указатели для разрешения этого.
Это признак неправильного закрытия / освобождения ресурсов 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) {}
}
Если вы не закроете их как можно скорее, БД рано или поздно возьмет это в свои руки, и ваше приложение может рано или поздно сломаться, как вы сами столкнулись.
Чтобы повысить производительность подключения, используйте пул подключений - вам все равно нужно получать и закрывать их так же, как описано выше! Теперь это просто реализация пула соединений, которая под капотами беспокоит , на самом деле закрывает соединение или нет.
Похоже, время ожидания соединения прервано. Я не совсем то, где проблема. Возможно, это связано с подключением к вашему серверу БД. Извините, я больше не могу вам помочь, но надеюсь, что это поможет.