gpt4 book ai didi

使用PreparedStatement 语句进行 Java Oracle Blob 与 Blob 比较失败

转载 作者:行者123 更新时间:2023-12-02 11:58:26 25 4
gpt4 key购买 nike

我尝试将保存为字节数组的 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#ecexuteUpdate()

Executes the SQL statement in this PreparedStatement object, which must be an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or DELETE; or an SQL statement that returns nothing, such as a DDL statement.

也就是说 - 此方法不适用于执行 SELECT 语句。仅 INSERT、DELETE、UPDATE 或不返回任何内容的 SQL - SELECT 返回结果集。

<小时/>

另一个错误是根据LIKE operator的文档它们的参数只能是以下数据类型:

char1 LIKE char2 [ ESCAPE asc_chars ]
All of the character expressions (char1, char2, and esc_char) can be of any of the data types CHAR, VARCHAR2, NCHAR, or NVARCHAR2. If they differ, then Oracle converts all of them to the data type of char1.

如您所见,此处不支持 BLOB 数据类型作为参数。使用 BLOB 数据类型作为 LIKE 运算符的参数 --> p.setBlob(1,blob);,因此抛出错误:ORA-06553: PLS-306: 错误的数字或调用“CAST_TO_VARCHAR2”时的参数类型,因为 Oracle 尝试将 BLOB 转换为 VARCHAR2 数据类型,但不允许这种转换。

关于使用PreparedStatement 语句进行 Java Oracle Blob 与 Blob 比较失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47437421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com