使用MyBaits3的ExecutorType.BATCH批量插入数据到oracle报错
一条条插入不报错,使用ExecutorType.SIMPLE批量也不报错。怎么回事呢?
ExecutorType.BATCH不能用吗??
org.apache.ibatis.exceptions.PersistenceException:
### Error committing transaction. Cause: java.lang.ArrayIndexOutOfBoundsException是不是记录条数太多溢出了,把自动提交事务关闭,自己控制多少记录一起提交吧
可以肯定不是条数的问题
只insert2条,关闭了自动commit,每次2条insert后就commit。每次一条commit不报错!
我也遇到了这个问题。有没有大牛知道要怎么解决啊。我的代码是这样的:
<preclass="brush:java;toolbar:true;auto-links:false;">publicintinsertRowSubInfoList(List<IRowSubInfoModel>rowList)throwsSQLException{assertrowList!=null&&!rowList.isEmpty();//从当前环境中根据connection生成批量提交的sqlSessionSqlSessionsession=sqlSessionFactory.openSession(ExecutorType.BATCH,false);//原定手动管理事务,改为自动管理。//管理session默认的自动提交,以便于手动管理数据库事务。//如果不关闭,则session.flushStatements();时就会提交一次事务,从而破坏事务的原子性。session.getConnection().setAutoCommit(false);//事务工厂。这个东西可能是多线程安全的//TransactionFactorytransactionFactory=newJdbcTransactionFactory();//当前操作的事务。创建的同时就已经打开了。//TransactionnewTransaction=//transactionFactory.newTransaction(session//.getConnection());IRowSubInfoMappermapper=session.getMapper(IRowSubInfoMapper.class);////整个列表的长度,也是一次批量插入的总数据量。//intsize=rowList.size();try{//准备批量插入for(IRowSubInfoModelrow:rowList){//session.insert(BATCH_STATEMENT_INSERT,row);mapper.insertRowSubInfo(row);}session.commit(true);//如果上述操作全部成功完成,那么提交。//newTransaction.commit();}catch(Exceptione){//抛出任何异常,都回滚//但是,由于session.flushStatements();时会自动提交一次,因此,这里回滚的实际只有插入失败以后的数据。//已经插入数据库的数据,不会在此回滚session.rollback(true);//并且,将异常封装后,再次抛出,以通知调用者。thrownewSQLException(e);}finally{//最后关闭资源。//newTransaction.close();session.close();}returnrowList.size();}版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。