使用PreparedStatement语句进行Java Oracle 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(

我尝试将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(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(),是否应该工作?呜呜?还是说没有办法把一团一团地比较?