在使用Java保存之前,我需要比较blob的内容(如果它已经存在于数据库中)。
以下是我到目前为止所做的事情:
String id = "";
String blob_name = "";
boolean exist = false;
PreparedStatement ps = dbConBuilder.getConnection().prepareStatement("SELECT ID, BLOB_NAME from TBL_BLOB where BLOB_CONTENT = ?");
InputStream in = new ByteArrayInputStream(getBLOB_Content().getBytes("UTF-8"));
ps.setBinaryStream(1, in, (int) getBLOB_Content().length());
ResultSet rs = ps.executeQuery();
while (rs.next()) {
id = rs.getString("ID");
blobname = rs.ge_tString("BLOB_NAME");
exist = true;
}
但我收到GDS Exception. 335544384. internal error
错误。
请帮忙。提前谢谢。
答案 0 :(得分:0)
如果查看at Firebird 1.5 error codes,您给出的错误代码是badblk(坏块),这意味着您的byte []可能是错误的大小/形式,并且无法作为ByteArrayInputStream正确读取但是这取决于getBLOB_Content()
您的查询的参数索引也不应该是1,而不是0?
答案 1 :(得分:0)
根据Firebird 2.5语言参考中的note,仅在Firebird 2.0之后才支持blob内容的相等性比较。在此之前,通过使用blob ID(blob的存储位置的类型),比较检查它们是否是相同的blob。