Java JDBC: Reply.fill () - PullRequest
       15

Java JDBC: Reply.fill ()

7 голосов
/ 10 сентября 2009

Время от времени я получаю следующее исключение:

com.ibm.db2.jcc.b.gm: [jcc] [t4] [2030] [11211] [3.50.152] Произошла ошибка связи во время операций с нижележащим сокетом соединения, входным потоком сокета, или сокет выходного потока. Местоположение ошибки: Reply.fill (). Сообщение: сброс соединения. ERRORCODE = -4499, SQLSTATE = 08001

Проблема в том, что код успешно выполняется в течение некоторого времени, а затем внезапно я получаю это исключение. Однако он работает правильно, когда я снова запускаю код.

Может кто-нибудь сказать мне, что может быть не так, и дать мне несколько советов, чтобы решить эту проблему.

Ответы [ 4 ]

3 голосов
/ 16 марта 2010

Это признак неправильного закрытия / освобождения ресурсов 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) {}
}

Если вы не закроете их должным образом как можно скорее, БД рано или поздно возьмет их в свои руки, и ваше приложение может рано или поздно сломаться, как вы столкнулись с собой.

Чтобы улучшить производительность соединения, используйте пул соединений - вам все равно нужно получить и закрыть их так же, как здесь, выше! Теперь это просто реализация пула соединений, которая под капотом беспокоится о том, что на самом деле закрывает соединение или нет.

1 голос
/ 13 сентября 2011

Мы также недавно столкнулись с этой проблемой, и это произошло из-за путаницы предложений И ИЛИ вместе с предложением a и rownum <. Поставить брекеты в нужных местах решило это. </p>

0 голосов
/ 14 марта 2011

Мне кажется, это может быть вызвано https://www -304.ibm.com / поддержка / docview.wss? UID = swg1IC63952

По крайней мере, для нас это так.

Проверьте ваш db2diag.log на наличие ZRC=0x8005006D=-2147155859=SQLE_CA_BUILT "SQLCA has been built and saved in component specific control block." сообщений об ошибках, когда вы получаете такие отключения.

Позднее на этой неделе мы планируем перейти на DB2 9.7 FixPack 3a - ответим, если это поможет.

0 голосов
/ 16 марта 2010

Похоже, ваше соединение истекло. Я не совсем там, где проблема, хотя. Это может быть с подключением к вашему серверу базы данных. Извините, я не могу вам больше помочь, но надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...