Лоб закрыт. 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;";
Обратите внимание, что
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
Это сработало для меня..