我正在使用DB2 10.5 FP3。我有一个存储过程,它将一些数据插入数据库。部分数据定义为CLOB。在JDBC应用程序中,我进行了批量更新。它给出了错误:
[jcc] [t4] [2030] [11211] [4.19.26]期间发生通信错误 对连接的底层套接字,套接字输入流的操作, 或套接字输出流。错误位置:Reply.fill() - 不足 数据(-1)。消息:数据不足。 ERRORCODE = -4499, SQLSTATE = 08001
[ERROR] executeBatchUpdate中的问题。批处理元素#1出错: [jcc] [t4] [2030] [11211] [4.19.26]期间发生通信错误 对连接的底层套接字,套接字输入流的操作, 或套接字输出流。错误位置:Reply.fill() - 不足 数据(-1)。消息:数据不足。 ERRORCODE = -4499, SQLSTATE = 08001
[jcc] [10242] [10807] [4.19.26]连接失效。 ERRORCODE = -4224, SQLSTATE =空
如果我没有使用批处理,只为每条记录使用executeUpdate()
,一切都很好。
另外,我花了一些时间来调试它。如果在DB端,我将存储过程的参数从CLOB更改为VARGRAPHIC,那么批量更新就可以了。
以下是我准备声明的方式:
CallableStatement statement;
Clob clob = myConnection.createClob();
clob.setString(1, value);
statement.setClob(paramIndex, clob);
以下是我如何调用批次:
for (int index = 0; index < this.batchSize; index++) {
setJDBCParametersForBatchEntryAtDB2(statement, index);
statement.addBatch();// add the statement to the batch
}
statement.executeBatch();// execute the batch commands
任何人都有建议或解决方案吗?