oracle报java调试错误,MyBatis+Oracle时出现的错误:Methodoracle/jdbc/driver/OracleResultSetImpl.isClosed()Zisabstr...

今天在看MyBatis时,准备写一个Demo来验证看完TypHandler源码后的想法,可是demo刚一跑起来就报下面的错了。

e7e088e8389939ef2ae90d84d977201e.png

随手在网上搜了一遍,都说是版本不匹配;就是不明白怎么个不匹配法;可是好奇心驱使我就想看看怎么个不匹配法。

先把我自己的代码贴在这。

maven依赖:

492687c5e0c522a3aae7856137823bf6.gif

e04c662c68c3fce65101b5c24b383791.gif

1

2 mysql

3 mysql-connector-java

4 8.0.18

5

6

7

8 com.oracle

9 ojdbc14

10 10.2.0.4.0

11

12

17

18

19 org.mybatis

20 mybatis

21 3.5.3

22

View Code

入口类

492687c5e0c522a3aae7856137823bf6.gif

e04c662c68c3fce65101b5c24b383791.gif

1 public static void main(String[] args) throwsException{2 test2();3 }4

5 private static void test2() throwsException{6 SqlSessionFactoryBuilder builder=newSqlSessionFactoryBuilder();7 SqlSessionFactory sqlSessionFactory=builder.build(Resources.getResourceAsStream("mybatis-oracle-config.xml"),"dev");8 SqlSession sqlSession=sqlSessionFactory.openSession();9 IUserMapper userMapper=sqlSession.getMapper(IUserMapper.class);10 List list=userMapper.getUserList();11 for(User user1 : list) {12 System.out.println(user1.toString());13 }14 sqlSession.close();15 }

View Code

至于mybatis配置文件和具体的实体类就不贴了,不影响我表达。

从日志里面可以看到是在DefaultResultSetHandler.java的352行处报错。

管他三七二一,直接点击报错处撒个断点,然后跑一下demo.

a6389d44ee56b63e2f7dc6ebddb55a49.png

resultSet是指向OracleResultSetImpl.java这个类的(准确的说是类对象),我们先点isClosed()方法,让他直接跳转到定义出。

1dbbd4835da32c3fbbd8b1e4598fa0dc.png

直接跳转到了JDK的ResultSet.java中了,看来是有继承了。继续点isClosed()左侧的向下继承的箭头。

7366c86e8c957ff064c396e0144d494a.png

我们发现isClosed()这个方法没有在OracleResultSetImpl类中去继承和实现这个方法。

从上面的图中就能看到在Oracle的驱动程序里面根本就没有任何一个类实现了isClosed()这个方法。

所以运行到此处自然抛异常。

接下来吧oracle的依赖换成如下:

com.oracle

ojdbc6

1.0

fcde758d54de52a2360324b4f78d78b5.png

从调试界面可以看到resultSet指向ForwardOnluResultSet这个类。

9919cc68f22a868c38b2ba93844f6c87.png

这个类中依然没有isClosed()这个方法,猜测可能是从父类中继承过来的。

从下图右侧的依次往上面找,终于在OracleResultSet.clss中找到了这个方法。

c23974f75bae53e765efabc28abbd9c9.png

现在关于这个错误的追踪终于告一段落了。

现在看起来排查错误是一件很简单的事情,实际上当时都累死了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值