记oracle调用java方法异常

首先说下我的过程。

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就可以了。
--------------------- 
作者:北城柳絮雨南城丶 
原文:https://blog.csdn.net/u010005147/article/details/80175083 

但是我使用的数据库是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、总结

学海无涯

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值