我使用的是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]无效操作:Lob关闭。ERRORCODE=-4470,SQLSTATE=null
我做错了什么?
如何解决这个问题?
3条答案
按热度按时间tjrkku2a1#
此问题可以通过向连接url添加
progressiveStreaming=2;
参数来解决完整指定的连接URL如下所示:
如果该参数有异常,请添加以下内容:
最好使用
db2jcc4.jar
wd2eg0qa2#
由于它对于评论来说太长了,我研究了一段时间,这里有一些解释为什么
progressiveStreaming=2;
可以工作:它是DB2JDBC驱动程序的一个特殊参数,用于更改驱动程序处理大型对象(LOB)的方式。
如果参数包含在JDBCURL中,它将告诉DB2JDBC驱动程序“渐进地”流式传输LOB数据。这意味着驱动程序不会一次将LOB数据全部加载到内存中,而是在您访问数据时将其以小块或“块”的形式加载。
在大多数情况下,即使在ResultSet关闭之后,也可以访问LOB数据。这是因为即使在ResultSet关闭后,JDBC驱动程序仍然可以访问数据库中的底层LOB数据。
下面是如何在JDBC URL中使用参数的示例:
请注意,
progressiveStreaming=2;
参数只适用于某些版本的DB2 JDBC驱动程序。确保您使用的是受支持的驱动程序版本。ltqd579y3#
对我很有效。