Java BLOB更新不工作,也不显示错误,但它存储空值

Java BLOB更新不工作,也不显示错误,但它存储空值,java,Java,此代码在数据库中存储null PreparedStatement ps; String preparestmt = "update t_member set photo=? " + " where aplication_num = (select max(application_num) from t_member)"; ps = con.prepareStatement(preparestmt); ps.setBinaryStream(1,in,in.av

此代码在数据库中存储null

  PreparedStatement ps;  
    String preparestmt = "update t_member set photo=? " + " where aplication_num = (select max(application_num) from t_member)";
    ps = con.prepareStatement(preparestmt);  
     ps.setBinaryStream(1,in,in.available());
    ps.executeUpdate();
    ps.close();
    in.close();
     con.commit();
     con.close();

photo是blob字段,位于包含图像文件的inputstream中。插入图像已正确保存,但在我尝试更新时,它始终仅存储空值。inputstream也很好,我也检查了54353字节。请帮助我更新此数据。

请尝试从Java检索更新的图像,并检查它是否已更新。我希望您正在SQLClient中查看,它经常显示BLOB为null。

InputStream.available()
不提供流中的字节数

它返回可以在不阻塞的情况下读取的字节数

返回下一次调用此输入流的方法时可以从该输入流中读取(或跳过)的字节数的估计值。[…]

使用此方法的返回值来分配用于保存此流中所有数据的缓冲区是不正确的

(强调我)


您需要找到一种不同的方法来计算BLOB的大小。如果数据来自
文件
使用,
File.length()

为什么要将应用程序数量设置为max()?您如何确保此语句始终返回您预期的应用程序编号?tat不重要,我只希望像tat一样。如果我更新任何其他列,则仅更新blob就可以了。请您也粘贴您的insert语句好吗?您说过这是可行的。@sabarirajan:-我在将图像更新为blob时面临同样的问题,它总是空的,没有例外。你解决这个问题了吗?你能帮我一下吗。