0 0

Mybatis批处理报错10

代码如下:

 

List<VisitEntity> visits = new ArrayList<VisitEntity>();
VisitEntity uv = null;
for (int i = 0; i < 1000; i++) {
	uv = new VisitEntity();
	uv.setPage("http://www.site.com/");
	uv.setPageName("首页");
	uv.setReferer("http://www.site.com?wd=关键字");
	uv.setRefererDomain("http://www.baidu.com");
	uv.setSearchEngine("baidu");
	uv.setSearchWord("官网");
	uv.setSessionId("asadf232asdf22");
	uv.setTime(new java.util.Date());
	uv.setTrafficType("search");
	
	visits.add(uv);
}

SqlSessionFactory factory = MybatisUtil.getSqlSessionFactory();
SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false);
UserVisitMapper mapper = sqlSession.getMapper(UserVisitMapper.class);

//批量插入
long start = System.currentTimeMillis();

try {
	for (VisitEntity t : visits) {
		mapper.insert(t);
	}
	sqlSession.commit();
} catch (SQLException e) {
	e.printStackTrace();
}

long end = System.currentTimeMillis();
System.out.println("批量插入共花费时间" + (end-start) + "ms");

 

生成SqlSession,如果用默认的SimpleExecutor一切正常,换做BatchExecutor就会报下面的错误:

 

 

xception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
### Error committing transaction.  Cause: java.lang.ArrayIndexOutOfBoundsException
### Cause: java.lang.ArrayIndexOutOfBoundsException
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.commit(DefaultSqlSession.java:146)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.commit(DefaultSqlSession.java:138)
	at com.cssweb.analytics.persistence.ServiceTest.main(ServiceTest.java:151)
Caused by: java.lang.ArrayIndexOutOfBoundsException
	at java.lang.System.arraycopy(Native Method)
	at oracle.jdbc.driver.T4CRowidAccessor.unmarshalOneRow(T4CRowidAccessor.java:202)
	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:610)
	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
	at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
	at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10622)
	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.PreparedStatementLogger.invoke(PreparedStatementLogger.java:67)
	at $Proxy2.executeBatch(Unknown Source)
	at org.apache.ibatis.executor.BatchExecutor.doFlushStatements(BatchExecutor.java:81)
	at org.apache.ibatis.executor.BaseExecutor.flushStatements(BaseExecutor.java:97)
	at org.apache.ibatis.executor.BaseExecutor.flushStatements(BaseExecutor.java:92)
	at org.apache.ibatis.executor.BaseExecutor.commit(BaseExecutor.java:172)
	at org.apache.ibatis.executor.CachingExecutor.commit(CachingExecutor.java:80)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.commit(DefaultSqlSession.java:143)
	... 2 more

 

错误发生在下面这行:

 

 

at org.apache.ibatis.executor.BatchExecutor.doFlushStatements(BatchExecutor.java:81)

 

不知道这里面具体做了些什么事情,导致数组越界?

 

2012年8月10日 16:52
目前还没有答案

相关推荐

    mybatis-3-config/mapper.dtd 解决mybatis头文件报错

    解决mybatis头文件报错 下载好压缩包 解压将文件放到本地文件夹 例如 D盘的哪个文件夹 D:\mybatis\ ;然后打开eclipse -&gt;Window-&gt;prefenrence-&gt;XML-&gt;XML Catalog-&gt;User Specifiled Entreis-&gt;Add-&gt;Location(此处是你...

    mybatis批处理自动生成代码文件

    MyBatis批处理自动生成代码文件是一项非常实用的功能,它能够极大地提高开发效率,减少手动编写重复代码的工作量。此工具通常包含一个`.bat`批处理脚本,用于执行自动化生成过程,以及一个`generatorConfig.xml`配置...

    Mybatis的批处理

    以下是对Mybatis批处理的详细说明: 1. **批量插入** 批量插入是将多条插入语句合并成一个大的SQL语句来执行,避免了频繁的数据库连接开销。在Mybatis中,可以通过Mapper接口和对应的XML配置实现。首先,定义一个...

    mybatis-batch-test:Mybatis中sqlSession和foreach部署之间的区别

    #mybatis批处理测试 背景 如何在Mybatis和XML中的foreach中批处理Sqlsession 应用于mybatis批处理测试的技术如下: 使用开源 版本 Java 1.7 春天 4.1.5 摇动 2.2.1 Mybatis 3.2.8 功能细节 mybatis-batch-...

    mybaits 多线程 实现数据批量插入 (运用CountDownLatch实现闭锁)

    首先,我们来看`mybatis批处理`。MyBatis的批处理功能允许我们在一次数据库连接中执行多条SQL语句,从而减少了数据库连接的创建和关闭的开销,提高了性能。批处理可以通过设置`Statement`的`setFetchSize()`方法或者...

    mybatis中foreach报错:_frch_item_0 not found的解决方法

    在MyBatis中,`&lt;foreach&gt;`标签是用于遍历集合对象并生成SQL语句的重复部分,例如IN语句的括号内元素。然而,当你遇到“_frch_item_0 not found”这样的错误时,通常是由于在使用`&lt;foreach&gt;`时出现了配置或编码上的...

    spring boot整合mybatis-plus启动报错问题及解答.pdf

    在整合Spring Boot与MyBatis-Plus的过程中,可能会遇到启动应用时报错的问题。错误信息通常类似于"Error starting ApplicationContext",并提示"UnsatisfiedDependencyException",这表明Spring框架在初始化bean时...

    第三方缓存整合mybatis.rar

    在Java开发中,MyBatis是一个非常流行的持久层框架,它简化了数据库操作,通过XML或注解方式配置SQL和映射结果。然而,在大型应用中,为了提高系统的响应速度和减少数据库压力,通常会引入第三方缓存。本教程将讨论...

    解决mybatis-plus使用jdk8的LocalDateTime 查询时报错的方法

    在使用Mybatis-Plus进行数据查询时,如果你的实体类中使用了Java 8的`LocalDateTime`类型来表示日期时间,并遇到了`SQLFeatureNotSupportedException`的异常,这通常是因为数据库驱动不支持直接将`LocalDateTime`...

    Mybatis返回int或者Integer类型报错的解决办法

    总之,解决Mybatis返回`int`或`Integer`类型报错的问题,你可以: 1. 将Mapper方法的返回类型改为`Integer`,以允许返回`null`。 2. 在SQL查询中使用`NVL()`, `IFNULL()`, `ISNULL()`或`COALESCE()`函数来确保在没有...

    mybatis generator Myeclipse插件

    Mybatis Generator是一款强大的自动化代码生成工具,主要用于简化开发过程中对数据库操作的代码编写。它能够根据数据库中的表自动生成Java实体类、Mapper接口及其XML配置文件、DAO接口及其实现类等,极大地提高了...

    非侵入代码的java自动分批提交数据组件

    mybatis框架在执行批量插入或者更新的时候限制入参...突破mybatis批处理数据量2100个的限制,另一个应用场景是,即使没有用到mybatis,也可以作为自动分批提交的工具,防止一次性提交数据过大导致数据库自动提高锁级别

    MyBatis_plugin-3.21

    MyBatis是一款流行的Java持久层框架,它简化了数据库操作,使得开发者能够将注意力集中在SQL语句上,而无需处理繁琐的JDBC代码。MyBatis Plugin 3.2.1是针对IntelliJ IDEA(简称IDEA)的一款增强插件,旨在提升开发...

    Mybatis出现ORA-00911: invalid character的解决办法

    在开发过程中,数据库操作是必不可少的一环,而Mybatis作为一款流行的数据持久层框架,其在与Oracle数据库交互时可能会遇到各种错误。本篇文章将详细探讨一个特定的问题——"ORA-00911: invalid character",以及...

    MyBatis批量插入Update

    MyBatis批量插入Update MyBatis批量插入是一种高效的数据插入方式,通过将多条数据一次性插入数据库,可以大大提高插入速度。在实际测试中,使用MyBatis批量插入可以达到至少快一倍的执行效率。 MyBatis批量插入的...

    浅谈Mybatis版本升级踩坑及背后原理分析

    浅谈Mybatis版本升级踩坑及背后原理分析 Mybatis版本升级踩坑及背后原理分析是Mybatis开发中的一大难点,因为Mybatis版本的升级可能会导致一些不兼容的变化,从而导致系统出现一些问题。了解Mybatis版本升级踩坑及...

    使用mybatis-plus报错Invalid bound statement (not found)错误

    在使用Mybatis-Plus时,有时开发者可能会遇到一个常见的错误——`Invalid bound statement (not found)`。这个错误意味着Mybatis-Plus无法找到对应的SQL映射语句,这通常是由于配置问题或者依赖缺失所引起的。本文将...

    使用Mybatis Generator自动生成Mybatis相关代码

    Mybatis Generator是一款强大的工具,它能够自动生成Mybatis的相关代码,包括Mapper接口、XML映射文件、实体类以及DAO层的实现代码,极大地提高了开发效率,减少了手动编写这些重复性工作的繁琐。本篇文章将深入探讨...

    mybatis-generator的eclipse插件

    MyBatis Generator(MBG)是一款强大的自动化代码生成工具,它可以自动生成MyBatis的映射文件、Java实体类和DAO接口,极大地提高了开发效率。MBG作为一个独立的工具,通常通过命令行或者集成到IDE中来使用。在这个...

    mybatis返回Integer

    在使用MyBatis进行数据操作时,我们经常会遇到关于返回值类型的困扰,特别是涉及到基本类型int和对象类型Integer之间的转换。标题"mybatis返回Integer"指的是在MyBatis的映射文件或者Mapper接口中,使用Integer作为...

Global site tag (gtag.js) - Google Analytics