ibatis 批量插入时的越界异常

话说几个月前,就发现了这个异常,第一行提示java.lang.ArrayIndexOutOfBoundsException: -32593

越界,还是负数的,就继续找根源,找到项目中的批量插入,缺发现找不到越界的原因,代码是这种形式的

                executor.startBatch();
                for (int i = 0, count = locallist.size(); i < count; i++) {
                    ...
                }
                executor.executeBatch();

看不出越界。

昨天又出现了,决定要解决这个问题,错误如下:

java.lang.ArrayIndexOutOfBoundsException: -32593
	at oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:2677)
	at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:9270)
	at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:210)
	at com.alibaba.druid.filter.FilterChainImpl.statement_executeBatch(FilterChainImpl.java:2594)
	at com.alibaba.druid.filter.FilterAdapter.statement_executeBatch(FilterAdapter.java:2457)
	at com.alibaba.druid.filter.FilterEventAdapter.statement_executeBatch(FilterEventAdapter.java:279)
	at com.alibaba.druid.filter.FilterChainImpl.statement_executeBatch(FilterChainImpl.java:2592)
	at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeBatch(StatementProxyImpl.java:192)
	at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeBatch(DruidPooledPreparedStatement.java:542)
	at com.ibatis.sqlmap.engine.execution.SqlExecutor$Batch.executeBatch(SqlExecutor.java:611)
	at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeBatch(SqlExecutor.java:118)
	at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.executeBatch(SqlMapExecutorDelegate.java:759)
	at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.executeBatch(SqlMapSessionImpl.java:184)
...
	at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:200)
...

找了一些无用的答案,最后锁定第一行OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:2677)查找

http://www-01.ibm.com/support/docview.wss?uid=swg21432290
这个链接是说引起这个异常的原因:
oracle 10g的驱动执行的批量提交只支持32768个参数,如果表的字段多于32个,有可能引发该异常,解决办法是升级oracle的驱动。
项目用的是ojdbc14.jar,算了一下,一次提交3000条记录,插入10多个字段,超过32768,之后的插入一直失败。应该就是这个问题了。
之后查找了一下http://tiantian0521.blog.163.com/blog/static/4172088320117294265766/
这个链接说的是几个ojdbc的区别,在最后一段也表示遇到批量插入问题,换了ojdbc6.jar后解决了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值