BLOB更新不起作用,也没有显示错误,但它存储为null

时间:2013-06-12 09:58:10

标签: 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.available());
    ps.executeUpdate();
    ps.close();
    in.close();
     con.commit();
     con.close();

照片是blob字段,in是包含图像文件的输入流。在插入图像中保存正确,但我尝试update.it始终只存储null。输入流也很好。我检查了54353个字节。帮我更新这些数据。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

InputStream.available() NOT 会为您提供流中的字节数。

它返回可以无阻塞地读取的字节数

From the JavaDocs

  

返回估计,可以通过下一次调用方法从此输入流无阻塞地读取(或跳过)的字节数对于此输入流。 [...]

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

(强调我)

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