Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尽管语句中存在数据,Blob字段会自动设置为null_Java_Mysql_Sql - Fatal编程技术网

Java 尽管语句中存在数据,Blob字段会自动设置为null

Java 尽管语句中存在数据,Blob字段会自动设置为null,java,mysql,sql,Java,Mysql,Sql,表中有两个插入项,其中一列是Blob。在第一次插入中,blob正确存储,而在第二次插入中,它在调试时存储null,显示blobnullbinder,其中前一次显示同一字段的blobbinder。此插入在for循环中发生了两次,其中表中的其他字段不同,但blob相同。我在设置为CallableStatement之前进行了调试&它打印了两次值,但在db 2nd time中设置为null。为什么它会这样 if (paramValue instanceof InputStream) ((Call

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

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

paramValue
InputStream
对象在两个调用中是否相同

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

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

if (paramValue instanceof byte[])
   ((CallableStatement) stmt).setBlob(i + 1, new ByteArrayInputStream((byte[]) paramValue));

将paramValue转换为字节[]并将其设置?是的…在第二次迭代中设置相同的值。正如您所提到的,它已经被使用了。请您解释清楚一点,以及如何解决它。