Лоб закрыт. ERRORCODE=-4470, SQLSTATE=null

Я использую IBM Websphere Commerce и DB2, есть следующий кусок кода

Clob clobVar = null;
if (result.elementAt(3) != null)
    clobVar = (Clob) result.elementAt(3);

if (clobVar == null) {
    infoTable.put("EInfo", "");
} else {
    stringTemp = clobVar.getSubString(1, (int) clobVar.length());
    infoTable.put("EInfo", stringTemp); 
}

Код работает нормально до

clobVar = (Clob) result.elementAt(3);

но как только казнь приходит к

stringTemp = clobVar.getSubString(1, (int) clobVar.length());

Система выдает исключение

[jcc][10120][11936][4.3.111] Недопустимая операция: Лоб закрыт. ERRORCODE = -4470, SQLSTATE = null

Что я делаю не так?

Как решить эту проблему?

3 ответа

Эту проблему можно решить, добавив progressiveStreaming=2; Аргумент к URL-адресу соединения

Полностью указанный URL-адрес соединения должен был быть указан ниже:

jdbc:db2://localhost:50000/SAMPLE:progressiveStreaming=2;

Если у вас есть исключение для этого параметра, добавьте в него следующее:

jdbc:db2://localhost:50000/SAMPLE:driverType=4;fullyMaterializeLobData=true;fullyMaterializeInputStreams=true;progressiveStreaming=2;progresssiveLocators=2;

Предпочтительнее использовать db2jcc4.jar

Поскольку комментарий слишком длинный, и я некоторое время занимался исследованиями, вот объяснение , почему это работает:

Это специальный параметр драйвера JDBC DB2, который изменяет способ обработки драйвером больших объектов (LOB).

Если этот параметр включен в URL JDBC, он сообщает драйверу JDBC DB2 «постепенную» потоковую передачу данных LOB. Это означает, что драйвер не будет загружать LOB-данные в память сразу, а вместо этого будет загружать их небольшими порциями или «кусками» по мере доступа к данным.

В большинстве случаев доступ к LOB-данным возможен даже после закрытия ResultSet. Это связано с тем, что драйвер JDBC по-прежнему может получить доступ к базовым LOB-данным в базе данных даже после закрытия ResultSet.

Вот пример того, как вы можете использовать этот параметр в URL-адресе JDBC:

      String url = "jdbc:db2://localhost:50000/MYDB:progressiveStreaming=2;";

Обратите внимание, чтоПараметр работает только с определенными версиями драйвера JDBC DB2. Убедитесь, что вы используете поддерживаемую версию драйвера.

If everything has worked earlier with same code...but the issue came up after db2 db change, then try below configuration..
db2set DB2_RESTRICT_DDF=TRUE

Это сработало для меня..

Другие вопросы по тегам