MyBatis+Oracle时出现的错误: Method oracle/jdbc/driver/OracleResultSetImpl.isClosed()Z is abstract
2023-09-11 14:22:24 时间
今天在看MyBatis时,准备写一个Demo来验证看完TypHandler源码后的想法,可是demo刚一跑起来就报下面的错了。
随手在网上搜了一遍,都说是版本不匹配;就是不明白怎么个不匹配法;可是好奇心驱使我就想看看怎么个不匹配法。
先把我自己的代码贴在这。
maven依赖:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <dependency> 2 <groupId>mysql</groupId> 3 <artifactId>mysql-connector-java</artifactId> 4 <version>8.0.18</version> 5 </dependency> 6 7 <dependency> 8 <groupId>com.oracle</groupId> 9 <artifactId>ojdbc14</artifactId> 10 <version>10.2.0.4.0</version> 11 </dependency> 12 <!--<dependency> 13 <groupId>com.oracle</groupId> 14 <artifactId>ojdbc6</artifactId> 15 <version>1.0</version> 16 </dependency>--> 17 18 <dependency> 19 <groupId>org.mybatis</groupId> 20 <artifactId>mybatis</artifactId> 21 <version>3.5.3</version> 22 </dependency>
入口类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public static void main(String[] args) throws Exception{ 2 test2(); 3 } 4 5 private static void test2() throws Exception{ 6 SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); 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<User> list=userMapper.getUserList(); 11 for (User user1 : list) { 12 System.out.println(user1.toString()); 13 } 14 sqlSession.close(); 15 }
至于mybatis配置文件和具体的实体类就不贴了,不影响我表达。
从日志里面可以看到是在DefaultResultSetHandler.java的352行处报错。
管他三七二一,直接点击报错处撒个断点,然后跑一下demo.
resultSet是指向OracleResultSetImpl.java这个类的(准确的说是类对象),我们先点isClosed()方法,让他直接跳转到定义出。
直接跳转到了JDK的ResultSet.java中了,看来是有继承了。继续点isClosed()左侧的向下继承的箭头。
我们发现isClosed()这个方法没有在OracleResultSetImpl类中去继承和实现这个方法。
从上面的图中就能看到在Oracle的驱动程序里面根本就没有任何一个类实现了isClosed()这个方法。
所以运行到此处自然抛异常。
接下来吧oracle的依赖换成如下:
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>1.0</version> </dependency>
从调试界面可以看到resultSet指向ForwardOnluResultSet这个类。
这个类中依然没有isClosed()这个方法,猜测可能是从父类中继承过来的。
从下图右侧的依次往上面找,终于在OracleResultSet.clss中找到了这个方法。
现在关于这个错误的追踪终于告一段落了。
现在看起来排查错误是一件很简单的事情,实际上当时都累死了。
相关文章
- 忘记oracle的sys用户密码如何修改以及Oracle 11g 默认用户名和密码
- 【Oracle】 rman 删除归档日志的命令
- 【Oracle】RMAN-03009 ORA-01400 错误解决方法
- struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Jsp页面
- Oracle VM VirtualBox配置文件
- ORACLE查看数据库安装补丁情况
- ORACLE关闭启动的诡异错误
- Client使用c#和odp.net连接server oracle
- Ubuntu安装Oracle时出现乱码,及其他安装错误
- oracle分析函数与over()(转)
- Oracle 客户端连接时报ORA-01019错误总结
- oracle常用函数使用大全 Oracle除法(转)
- 安装oracle 11g rac (11.2.03) 出现PRVF-5637 错误
- 【解决】oracle报IMP-00058与IMP-00000错误
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
- 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇二:基于OneNote难点突破和批量识别
- 安装oracle 11g rac (11.2.03) 出现PRVF-5637 错误
- C# 连接Oracle数据库,免安装oracle客户端
- ORACLE中的Net Configuration Assistant 点击后无反应, sqlplus登录数据库提示Oracle11g ORA-12560: TNS: 协议适配器错误
- Oracle OCI-22053:溢出错误解决方法
- Windows下手动完全卸载Oracle
- Oracle Greatest()函数
- Atitit oracle新特性5 6 7 8 9 10 11 12 18 19 20 attilax总结 目录 1.1. :ora 20c1 1.2. Oracle Database 19c 的
- PostgreSQL Oracle 兼容性 之 - PL/SQL record, table类型定义
- PostgreSQL的学习心得和知识总结(二十二)|语法级自上而下完美实现Oracle的rownum的实现方案
- 解密 Oracle 数据库 SQL 执行历史:掌握多种实现方式,轻松实现 SQL 监控与性能优化
- ORACLE学习之隐含参数介绍与查看
- Oracle的学习心得和知识总结(八)|Oracle数据库PL/SQL语言顺序控制语句之GOTO和NULL语句技术详解
- 【Mysql异构实时同步Oracle】OGG12异构同步mysql到oracle(windows mysql实时同步数据到linux oracle)详细文档