mybatis+ojdbc6.jar的一个奇怪问题记录

简介:

使用以下代码、配置时,发生异常。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public  interface  IRowPropSubInfoMapper {
     /**
      * 将数据写入行基础信息子表中
      *
      * @author 團長
      * @since 2013-12-19
      * @param row
      *            行基础信息。
      * @return 插入的行数
      * @throws SQLException
      *             数据库操作发生异常时将抛出此异常。
      * @deprecated 2013-12-19 改用批量操作
      */
     @Deprecated
     public  int  insertRowPropSubInfo(IRowPropSubInfoModel row)
             throws  SQLException;
}


mybatis的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
< settings >
     <!-- 全局映射器启用缓存 -->
     < setting  name = "cacheEnabled"  value = "true"  />
     <!-- 查询时,关闭关联对象即时加载以提高性能 纳闷,加上这一行会报错。 <setting name="lazyLoadingEnabled"
         value="true" /> -->
     <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->
     < setting  name = "aggressiveLazyLoading"  value = "true"  />
     <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
     < setting  name = "multipleResultSetsEnabled"  value = "true"  />
     <!-- 允许使用列标签代替列名 -->
     < setting  name = "useColumnLabel"  value = "true"  />
     <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
     < setting  name = "useGeneratedKeys"  value = "true"  />
     <!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
     < setting  name = "autoMappingBehavior"  value = "FULL"  />
     <!-- 对于批量更新操作缓存SQL以提高性能 -->
     < setting  name = "defaultExecutorType"  value = "REUSE"  />
     <!-- 数据库超过25000毫秒仍未响应则超时 -->
     < setting  name = "defaultStatementTimeout"  value = "25000"  />
</ settings >


sql语句配置(sql语句中配置的参数个数,即values中的参数个数,小于等于7个时则可以正常执行;大于7个时将抛出异常。异常信息见后续。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
< insert  id = "insertRowPropSubInfo"
     parameterType = "com.sinosig.evaluation.fcff.model.dto.IRowPropSubInfoModel" >
     insert into
     t_eva_fcff_row_property values
     (#{fcffid,jdbcType=INTEGER},
     #{code,jdbcType=VARCHAR},
     #{name,jdbcType=VARCHAR},
     #{description,jdbcType=VARCHAR},
     #{isshow,jdbcType=VARCHAR},
     #{currentPremethodCode,    jdbcType=VARCHAR},
     #{currentPreValue, jdbcType=VARCHAR},
     #{currentScaleBase,    jdbcType=VARCHAR},
     #{warningDescription, jdbcType=VARCHAR})
</ insert >


spring类配置:

1
2
3
4
5
< bean  id = "RowPropSubInfoMapper"  class = "org.mybatis.spring.mapper.MapperFactoryBean"
     parent = "BaseMybatisDao" >
     < property  name = "mapperInterface"
         value = "com.sinosig.evaluation.fcff.dao.IRowPropSubInfoMapper"  />
</ bean >


数据源配置:

1
2
3
4
5
6
7
< bean  id = "dataSource"  class = "org.apache.commons.dbcp.BasicDataSource"
     destroy-method = "close" >
     < property  name = "driverClassName"  value = "oracle.jdbc.driver.OracleDriver"  />
     < property  name = "url"  value = "jdbc:oracle:thin:@10.10.164.115:1521:ceshidb"  />
     < property  name = "username"  value = "atip"  />
     < property  name = "password"  value = "atip"  />
</ bean >


测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@Test
public  void  testInsert() {
     List<IRowPropSubInfoModel> rowList = initRowList();
     try  {
         int  count =  1 ;
         for  (IRowPropSubInfoModel iRowSubInfoModel : rowList) {
             System.out.println(count++);
             System.out.println( "fcffid = "  + iRowSubInfoModel.getFcffid());
             System.out.println( "code = "  + iRowSubInfoModel.getCode());
             System.out.println( "name = "  + iRowSubInfoModel.getName());
             System.out.println( "description = "
                     + iRowSubInfoModel.getDescription());
             System.out.println( "isshow = "  + iRowSubInfoModel.getIsshow());
             System.out.println( "currentPremethodCode = "
                     + iRowSubInfoModel.getCurrentPremethodCode());
             System.out.println( "currentPreValue = "
                     + iRowSubInfoModel.getCurrentPreValue());
             System.out.println( "currentScaleBase = "
                     + iRowSubInfoModel.getCurrentScaleBase());
             System.out.println( "warningDescription = "
                     + iRowSubInfoModel.getWarningDescription());
             mapper.insertRowPropSubInfo(iRowSubInfoModel);
         }
     catch  (SQLException e) {
         e.printStackTrace();
         fail();
     }
}


异常信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error preparing statement.  Cause: java.lang.ArrayIndexOutOfBoundsException:  9
     at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java: 73 )
     at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java: 364 )
     at $Proxy5.insert(Unknown Source)
     at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java: 236 )
     at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java: 79 )
     at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java: 40 )
     at $Proxy31.insertRowPropSubInfo(Unknown Source)
     at test.com.sinosig.evaluation.fcff.dao.RowPropSubInfoMapperTest.testInsert(RowPropSubInfoMapperTest.java: 69 )
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39 )
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25 )
     at java.lang.reflect.Method.invoke(Method.java: 597 )
     at org.junit.runners.model.FrameworkMethod$ 1 .runReflectiveCall(FrameworkMethod.java: 44 )
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java: 15 )
     at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java: 41 )
     at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java: 20 )
     at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java: 79 )
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java: 71 )
     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java: 49 )
     at org.junit.runners.ParentRunner$ 3 .run(ParentRunner.java: 193 )
     at org.junit.runners.ParentRunner$ 1 .schedule(ParentRunner.java: 52 )
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java: 191 )
     at org.junit.runners.ParentRunner.access$ 000 (ParentRunner.java: 42 )
     at org.junit.runners.ParentRunner$ 2 .evaluate(ParentRunner.java: 184 )
     at org.junit.runners.ParentRunner.run(ParentRunner.java: 236 )
     at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java: 50 )
     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java: 38 )
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java: 467 )
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java: 683 )
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java: 390 )
     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java: 197 )
Caused by: org.apache.ibatis.executor.ExecutorException: Error preparing statement.  Cause: java.lang.ArrayIndexOutOfBoundsException:  9
     at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java: 91 )
     at org.apache.ibatis.executor.statement.RoutingStatementHandler.prepare(RoutingStatementHandler.java: 54 )
     at org.apache.ibatis.executor.ReuseExecutor.prepareStatement(ReuseExecutor.java: 73 )
     at org.apache.ibatis.executor.ReuseExecutor.doUpdate(ReuseExecutor.java: 46 )
     at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java: 108 )
     at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java: 75 )
     at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java: 145 )
     at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java: 134 )
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39 )
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25 )
     at java.lang.reflect.Method.invoke(Method.java: 597 )
     at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java: 354 )
     ...  29  more
Caused by: java.lang.ArrayIndexOutOfBoundsException:  9
     at oracle.jdbc.driver.OracleSql.computeBasicInfo(OracleSql.java: 950 )
     at oracle.jdbc.driver.OracleSql.getSqlKind(OracleSql.java: 623 )
     at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java: 1212 )
     at oracle.jdbc.driver.T4CPreparedStatement.<init>(T4CPreparedStatement.java: 28 )
     at oracle.jdbc.driver.T4CDriverExtension.allocatePreparedStatement(T4CDriverExtension.java: 68 )
     at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java: 3140 )
     at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java: 3042 )
     at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java: 5890 )
     at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java: 508 )
     at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java: 400 )
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39 )
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25 )
     at java.lang.reflect.Method.invoke(Method.java: 597 )
     at org.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java: 53 )
     at $Proxy32.prepareStatement(Unknown Source)
     at org.apache.ibatis.executor.statement.PreparedStatementHandler.instantiateStatement(PreparedStatementHandler.java: 65 )
     at org.apache.ibatis.executor.statement.BaseStatementHandler.prepare(BaseStatementHandler.java: 82 )
     ...  41  more


改用ojdbc14-10.2.0.1.0.jar则不会出现上述问题。



本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/winters1224/1357930,如需转载请自行联系原作者

相关文章
|
前端开发 Java Maven
IDEA创建SSM(Spring+SpringMVC+Mybatis)项目-Jar包版
IDEA创建SSM(Spring+SpringMVC+Mybatis)项目-Jar包版
252 0
IDEA创建SSM(Spring+SpringMVC+Mybatis)项目-Jar包版
|
Java 数据库连接 数据格式
spring ,springmvc,mybatis 最基本的整合,没有多余的jar包和依赖 2018.9.29日
最基本的ssm框架整合        本案例采用2018商业版intellij  idea  编辑器    maven项目管理工具  tomcat8.5   接着上一篇使用springmvc最基本配置开始    https://www.
1242 0
|
Java 数据库连接 mybatis
SpringBoot通过jar包启动时MyBatis无法定位实体类
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82732095 ...
1790 0
|
XML 缓存 Java
01_MyBatis EHCache集成及所需jar包,ehcache.xml配置文件参数配置及mapper中的参数配置
 1 与mybatis集成时需要的jar ehcache-core-2.6.5.jar mybatis-ehcache-1.0.2.jar Mybatis、日志、EHCache所需要的jar包如下: 2 EHCache与mybatis集成 EHCache是一种广泛使用java分布式缓存通用缓存,Ja
1765 0
|
Java 关系型数据库 MySQL
02_MyBatis项目结构,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置
 项目结构(所需jar包,配置文件) sqlMapConfig.xml的配置内容如下: &lt;?xmlversion="1.0"encoding="UTF-8"?&gt; &lt;!DOCTYPEconfiguration PUBLIC"-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-co
1277 0
|
19天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
6天前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
2月前
|
Java 数据库连接 测试技术
SpringBoot 3.3.2 + ShardingSphere 5.5 + Mybatis-plus:轻松搞定数据加解密,支持字段级!
【8月更文挑战第30天】在数据驱动的时代,数据的安全性显得尤为重要。特别是在涉及用户隐私或敏感信息的应用中,如何确保数据在存储和传输过程中的安全性成为了开发者必须面对的问题。今天,我们将围绕SpringBoot 3.3.2、ShardingSphere 5.5以及Mybatis-plus的组合,探讨如何轻松实现数据的字段级加解密,为数据安全保驾护航。
89 1
|
2月前
|
Web App开发 前端开发 关系型数据库
基于SpringBoot+Vue+Redis+Mybatis的商城购物系统 【系统实现+系统源码+答辩PPT】
这篇文章介绍了一个基于SpringBoot+Vue+Redis+Mybatis技术栈开发的商城购物系统,包括系统功能、页面展示、前后端项目结构和核心代码,以及如何获取系统源码和答辩PPT的方法。
|
2月前
|
Java 关系型数据库 MySQL
1、Mybatis-Plus 创建SpringBoot项目
这篇文章是关于如何创建一个SpringBoot项目,包括在`pom.xml`文件中引入依赖、在`application.yml`文件中配置数据库连接,以及加入日志功能的详细步骤和示例代码。