使用PreparedStatement语句进行Java Oracle Blob到Blob比较失败
我尝试将blob中保存为字节数组的字符串与SQL查询中的字符串进行比较 据我所知,我需要将值转换为Blob,然后比较Blob和Blob 但是我犯了一个错误使用PreparedStatement语句进行Java Oracle Blob到Blob比较失败,java,oracle,blob,Java,Oracle,Blob,我尝试将blob中保存为字节数组的字符串与SQL查询中的字符串进行比较 据我所知,我需要将值转换为Blob,然后比较Blob和Blob 但是我犯了一个错误 String s = "SELECT * FROM TEST VAL like ?"; Blob blob = conn.createBlob(); blob.setBytes(1, ((String)"yes").getBytes("UTF-8")); PreparedStatement p = conn.prepareStatement(
String s = "SELECT * FROM TEST VAL like ?";
Blob blob = conn.createBlob();
blob.setBytes(1, ((String)"yes").getBytes("UTF-8"));
PreparedStatement p = conn.prepareStatement(s);
p.setBlob(1,blob);
p.executeUpdate();
但是得到异常错误
java.sql.SQLException: ORA-06553: PLS-306: wrong number or types of arguments in call to 'CAST_TO_VARCHAR2'
第一个错误是该语句是SELECT语句:
String s = "SELECT * FROM TEST VAL like ?";
但是您正在尝试调用p.executeUpdate()代码>
根据以下文件:
执行此PreparedStatement对象中的SQL语句,其中
必须是SQL数据操作语言(DML)语句,例如
插入、更新或删除;或者一个不返回任何内容的SQL语句,
例如DDL语句
也就是说-此方法不适用于执行SELECT
语句。仅插入、删除、更新或返回nothins的SQL-选择返回结果集
另一个错误是,根据其参数的文档,它们只能是以下数据类型:
像char2一样的char1[逃离asc\u chars]
所有字符表达式
(char1、char2和esc_char)可以是任何数据类型char,
VARCHAR2、NCHAR或NVARCHAR2。如果它们不同,则Oracle会转换
它们都是char1的数据类型
如您所见,BLOB数据类型在这里不允许作为参数。BLOB数据类型用作LIKE运算符-->p.setBlob(1,BLOB)的参数代码>,因此引发了错误:ORA-06553:PLS-306:调用'CAST_to_VARCHAR2'时参数的数量或类型错误。
因为Oracle试图将BLOB强制转换为VARCHAR2数据类型,但不允许此强制转换。那么,将'u强制转换为'u VARCHAR2'的定义和调用它的代码在哪里?此外,您的“选择”查询不正确-缺少“为什么要执行此强制转换:(字符串)“是”
?这是多余的。为什么from是错误的?谢谢,所以如果我将查询更改为VAL=?并将其替换为executeQuery(),是否应该工作?呜呜?还是说没有办法把一团一团地比较?