我正在使用Derby数据库。我写了这个问题:
InputStream is = new java.io.ByteArrayInputStream(BYTES);
PreparedStatement st11 = conn.prepareStatement("select f from a1 where dBlob =?)");
st11.setBlob(1,is,BYTES.length);
dBlob是BLOB数据类型。 BYTES也是BLOB数据类型。
但是当我执行此查询时,我收到以下异常:
引起:ERROR 42818:不支持“BLOB”和“BLOB”之间的比较。 类型必须具有可比性。字符串类型还必须具有匹配的排序规则。如果是 llation不匹配,可能的解决方案是强制转换操作数 默认排序规则(例如SELECT tablename FROM sys.systables WHERE CAST(tabl en as AS VARCHAR(128))='T1')
如何编写查询以避免此问题?
我也尝试过使用Convert,但它也不能用于:
PreparedStatement st11 = conn.prepareStatement("select f from a1 where dBlob
=CONVERT(?,BINARY)");
st11.setBlob(1,is,BYTES.length);
此外,是否可以获取传入参数的数据类型?通过反思或其他方式。
答案 0 :(得分:2)
无法直接搜索BLOB列是一个非常基本的限制,我认为你无法绕过它。
如果您的应用程序要求您通过BLOB数据的完全匹配来定期搜索数据库,我通常在我的应用程序中执行的操作是向数据库中添加一个类型为VARCHAR(128)的附加列,并存储SHA-1哈希列中BLOB值的哈希值。
然后,要搜索数据库,请计算要搜索的blob的哈希值,然后在哈希列中搜索完全匹配。