0

表中有两次插入,其中一列是 Blob。在第一次插入时,blob 存储正确,而在第二次插入中,它存储 null,而在调试时它显示 blobnullbinder,而前一个显示相同字段的 blobbinder。此插入发生在 for 循环中两次,其中表中的其他字段不同但 blob 相同。我在设置为 CallableStatement 之前进行了调试,它打印了两次值,但在 db 中第二次设置为空。为什么它会这样。

if (paramValue instanceof InputStream)
    ((CallableStatement) stmt).setBlob(i + 1, (InputStream) paramValue);
4

1 回答 1

1

两个调用中的paramValue'sInputStream同一个对象吗?

在这种情况下,我们可以安全地假设当第二次迭代开始时,流已经被消耗掉,因此是空值。

由于InputStream不能多次使用,因此您需要缓存其内容。我建议将所有流的内容读入 a byte [],将其传递给您的方法并修改您的代码,如下所示:

if (paramValue instanceof byte[])
   ((CallableStatement) stmt).setBlob(i + 1, new ByteArrayInputStream((byte[]) paramValue));
于 2013-09-06T13:56:20.877 回答