使用 Oracle 内部 JDBC 驱动程序调用 createClob() 时出现 java.lang.NoSuchMethodError

标签 java jdbc oracle11g

我在 Oracle 11.2.0.3 数据库中加载了一个 Java 程序。我正在使用 Oracle 的 Server-Side Internal Driver与主机数据库通信。

问题是当我尝试将数据插入 clob 列时

Clob clob = targetCon.createClob();
clob.setString(1, (String) value);
insertStm.setClob(col, clob);

我收到错误

Exception in thread "Root Thread" java.lang.NoSuchMethodError

如果我从独立程序(在数据库外部运行)调用它,则相同的代码可以工作。在这两种情况下,驱动程序信息均显示 Oracle JDBC 驱动程序版本:11.2.0.3.0

我还尝试了以下代码

String s = (String) value;
StringReader stringReader = new StringReader(s);
insertStm.setCharacterStream(col, stringReader , s.length());

但这给了我

java.sql.BatchUpdateException: ORA-01460: unimplemented or unreasonable conversion requested

Doc ID 1484721.1在 My Oracle Support 中指示使用 setClob()...

为什么我的代码在作为独立程序运行时可以工作,但在使用内部驱动程序(具有相同版本)时抛出错误?

最佳答案

这个问题似乎可以通过将插入内容包装在 PL/SQL block 中来解决

BEGIN
 INSERT id, c INTO clob_tab VALUES(?,?);
END;

并使用setCharacterStream,但我仍然很好奇为什么原始代码会抛出NoSuchMethodError

关于使用 Oracle 内部 JDBC 驱动程序调用 createClob() 时出现 java.lang.NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25238228/

相关文章:

java - Set toArray() 方法中需要 new String[0]

java - 无法连接 连接 连接关闭后不允许进行任何操作。 Tomcat 7 中的错误

java - JDBC中Connection.getWarnings()和Statement.getWarnings()的区别?

oracle11g - 有没有oracle 11g的版本供学习?

Oracle pl-sql 转义字符(对于 "'")

java - LinkedHashMap<double[], Integer>,无法使用 .get 或 .containsKey 访问 Integer

java - 使用 System.load(dll) 执行 JAVA 应用程序

java - Android onBackPressed 适用于所有 Activity

java - JPA 仅创建一次查询

database - Oracle 存储过程不工作,可能是因为语法