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

时间:2014-08-11 07:50:25

标签: 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 driver version: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
My Oracle Support中的

Doc ID 1484721.1指示使用setClob()...

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

1 个答案:

答案 0 :(得分:1)

问题似乎是通过将插入包装在PL / SQL块

中来解决的
BEGIN
 INSERT id, c INTO clob_tab VALUES(?,?);
END;

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