首先说下我的过程。
1、在java代码中更新表中的一个clob字段。所以要创建一个clob字段。
// --1 :createClob方法是1.6之后才有的方法
Clob clob = conn.createClob();
// --2
CLOB clob;
clob = CLOB.createTemporary(conn, true, CLOB.DURATION_CALL);
存储过程如下:
create or replace function fnConvert(uuid varchar2,convertType varchar2) return varchar2 as
language java name 'Converter.convert(java.lang.String,java.lang.String) return java.lang.String';
2、使用第一种方法,代码可以正常编译运行通过。但是在数据库中,使用存储过程调用的时候,出现了如下问题。
java调用未捕获的java异常错误终止:java.lang.abstractMethodError.
查找原因,好多人说是jar包冲突了,猜想可能是conn.createClob()代码的问题。(因为我只改了这个获取clob的方法。o(╥﹏╥)o).看到有如下说法
java.lang.AbstractMethodError:oracle.jdbc.T4CConnection.createClob()。
出现此问题是oracle的驱动ojdbc版本问题,我的项目使用的是ojdbc14.jar,对应的应该是oracle10,它是和JDK1.4配套使用的oracle驱动。而ojdbc6.jar对应的是oracle11,它是和JDK1.6对应的oracle驱动。因此只要把jar包换成ojdbc6.jar就可以了。
---------------------
作者:北城柳絮雨南城
但是我使用的数据库是oracle11,驱动也是ojdbc6,(好吧,这在idea中的确运行通过,是没有问题的)。但是运行存储过程还是有问题,不得其解,不知道哪里的问题,所以,我们换个解法吧~
3、使用第二种创建clob的方法,运行的时候直接抛出了异常。
createTemporary的构造函数有三个参数,第一个是Oracle的connection,第二个表示当前的Clob是否需要缓存,第三个表示当前Clob的持续时间。
java.sql.SQLException: 持续时间对该函数无效 at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70) at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:263) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:271) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:445) at oracle.jdbc.driver.T4C8TTIClob.createTemporaryLob(T4C8TTIClob.java:476) at oracle.jdbc.driver.T4CConnection.createTemporaryClob(T4CConnection.java:2831) at oracle.sql.CLOB.createTemporary(CLOB.java:679)
at oracle.sql.CLOB.createTemporary(CLOB.java:640)
最后就得这样写。等有空了我在找找为啥吧。o(╥﹏╥)o
oracle.sql.CLOB newClob=null;
newClob = oracle.sql.CLOB.createTemporary(connection, false, oracle.sql.CLOB.DURATION_SESSION);//correct
//newClob = oracle.sql.CLOB.createTemporary(connection, false, oracle.sql.CLOB.DURATION_CALL);//exception
4、总结
学海无涯