在读取输入流时,过早地达到了DB2流的结束

时间:2015-01-22 15:45:07

标签: java java-ee db2

以下代码:

InputStream imageData=image.getInputStream();
byte[] bytes = ByteStreams.toByteArray(imageData);
pst.setBinaryStream(3, imageData, (int)bytes.length);

给出以下错误:

  

com.ibm.db2.jcc.am.SqlException:[jcc] [t4] [2039] [11162] [3.57.82]在读取InputStream参数#3时过早地达到了流的结束。剩余数据填充为0x0。 ERRORCODE = -4225,SQLSTATE = null`

我用来创建表的DDL如下:

CREATE TABLE ARCH_TRANCHE.UPLOAD_DETAIL (
    SEQ_ID VARCHAR(200) NOT NULL,
    FILE_NAME VARCHAR(140) NOT NULL,
    IMAGE_FILE BLOB(1048576),
    CREATED_DATE TIMESTAMP,
    LAST_MODIFIED_DATE TIMESTAMP,
    FILE_SIZE VARCHAR(20),
    PRIMARY KEY (SEQ_ID,FILE_NAME)
);

1 个答案:

答案 0 :(得分:1)

我怀疑问题是您已经读取数据,以便获取bytes ...所以当驱动程序尝试读取{{ 1}},它立即发现没有更多的数据可供阅读。

我建议你只设置一个没有长度的流:

imageData

如果您不能这样做(根据评论),您可以将所有数据提取到您正在进行的字节数组中,然后将其包装在pst.setBinaryStream(3, image.getInputStream()); 中:

ByteArrayInputStream