MyBatis+Oracle时出现的错误: Method oracle/jdbc/driver/OracleResultSetImpl.isClosed()Z is abstract

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

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

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

maven依赖:

 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>

入口类

 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中找到了这个方法。

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

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

原文地址:https://www.cnblogs.com/guoyansi19900907/p/12681222.html

时间: 2024-10-13 01:29:50

MyBatis+Oracle时出现的错误: Method oracle/jdbc/driver/OracleResultSetImpl.isClosed()Z is abstract的相关文章

ERROR:oracle.jdbc.driver.T4CPreparedStatement.isClosed()Z (sqoop从oralce向hive导数据)解决

[[email protected] ~]$ sqoop import -connect jdbc:oracle:thin:@192.168.8.228:1521:bonc -username AQ -password bonc1234 -table ORCL_TEST1 -hive-import -hive-database test -hive-table ORCL_HIVE_TEST1 -null-string ' ' -null-non-string '' -m 115/06/11 17

linux上备份Oracle时EXP-00091的错误解决方法

unix/linux上备份Oracle时EXP-00091的错误解决方法 unix/linux上备份数据时的错误解决方法 EXP-00091: Exporting questionable statistics.解决方法 今日EXP数据发现如下错误: EXP-00091: Exporting questionable statistics. . . exporting table                     TAXVOU3129    2904185 rows exported EX

java.lang.AbstractMethodError: Method com/mysql/jdbc/PreparedStatement.isClosed()Z is abstract

在学习Mybatis时出现下面的错误 1 java.lang.AbstractMethodError: Method com/mysql/jdbc/PreparedStatement.isClosed()Z is abstract 查阅资料后发现是Mybatis和mysql版本兼容问题 现在使用 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>or

使用springboot最新版本mysql-Connector连接数据库时提示Loading class `com.mysql.jdbc.Driver&#39;. This is deprecated.

在连接数据库时,使用了最新版本的mysql-Connector,即6.0以上版本 1.报错如下: Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class

使用springBoot和mybatis整合时出现如下错误:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)解决方案

在pom.xml文件中添加如下: <build>        <resources>            <resource>                <directory>src/main/java</directory>                <includes>                    <include>**/*.properties</include>          

oracle数据库报ORA-01033错误

Oracle登录 ORA-01033: ORACLE正在初始化或关闭的解决办法 2015-03-16 01:20 | 160511人阅读 | 来源 Oracle登录 ORA-01033: ORACLE正在初始化或关闭的解决方法 Oracle存在多实例 相应的在DOS命令下执行: 1. 设置正确的ORACLE实例:set ORACLE_SID = INSTANCE_NAME 2. 启动SQLPLUS:sqlplus /nolog 3.以DBA(通常有好几个sys或system)用户sqlplus登

安装Oracle客户端时,检查系统要求时状态为错误的解决办法

这是我自己安装oracle11g至win7的错误记录: 正在检查操作系统要求...要求的结果: 5.0,5.1,5.2,6.0 之一实际结果: 6.1 我换了 10g,11g从32bit到64bit折腾了好多次,最后终于找到了解决的方法-- 看到那一个错误了么?实际上是因为配置文件引起的 找到 refhost.xml 文件(位置:database/stage/prereq/db,打开 refhost.xml 配置文件并找到 <CERTIFIED_SYSTEMS> 节点,接着在节点后面修改6.0

关于Oracle安装完毕后,登录时遇到的错误的解决的方法

1 提示无监听服务 解决方法:打开Net Configuration Assistant 依照提示删除现有的监听服务,然后又一次建立一个就可以. 2 SQL Plus登陆时提示username或password无效 原因:oracle_home\NETWORK\ADMIN 文件夹以下的sqlnet.ora文件里是否包括了 "SQLNET.AUTHENTICATION_SERVICES= (NTS)" . 该行意味着操作系统默觉得sysdba的绑定认证方式 解决方法:基于上面的原因,使用

安装oracle时,检测系统要求时状态为错误的解决办法

在安装oracle时,检测系统要求时状态为错误的解决办法: 正在检查操作系统要求.... 要求的结果:5.0,5.1,5.2,6.0之一 实际结果:6.1      实际上是因为配置文件引起的      找到 refhost.xml 文件(位置:database/stage/prereq/db,打开 refhost.xml 配置文件并找到 <CERTIFIED_SYSTEMS> 节点,接着在节点后面修改6.0至6.1      <!--Microsoft Windows 7-->