`
gaoxing_china
  • 浏览: 28001 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

关于ibatis批量操作的代码

阅读更多
Mysql数据库,批量入库操作
使用ibatis批处理
代码如下:
public int addMessages(List list) {
    int result = 0;
    try {
        //this.getSqlMapTransactionManager().startTransaction();
        this.startBatch();
        for(int i=0;i<list.size();i++) {
  this.insert("addMessage",(Message)list.get(i));
        }
        this.executeBatch();
//this.getSqlMapTransactionManager().commitTransaction();
result = 1;
} catch (Exception e) {
   result = 0;
   e.printStackTrace();
} finally {
   try {
//this.getSqlMapTransactionManager().endTransaction();
    } catch (Exception e) {
e.printStackTrace();
    }
return result;
   }
}


我将事务管理的代码注掉了是没有错误的,但是不能实现事务管理。
我加的事务代码是会报错的,希望各位大侠指点谜经。我在这里先谢谢了!

加上我的事务管理代码报如下错误:



com.ibatis.common.jdbc.exception.NestedSQLException: Could not start transaction.  Cause: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not start a new transaction.  A transaction is already started.
Caused by: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not start a new transaction.  A transaction is already started.
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.startTransaction(SqlMapExecutorDelegate.java:728)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.startTransaction(SqlMapSessionImpl.java:125)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.startTransaction(SqlMapClientImpl.java:102)
at com.vodone.cpms.dao.impl.MessageDaoImpl.addMessages(MessageDaoImpl.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.ibatis.dao.engine.impl.DaoProxy.invoke(DaoProxy.java:72)
at $Proxy1.addMessages(Unknown Source)
at com.vodone.cpms.service.MessageService.addMessages(MessageService.java:26)
at com.vodone.cpms.service.MessageService.main(MessageService.java:70)
Caused by: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not start a new transaction.  A transaction is already started.
at com.ibatis.sqlmap.engine.transaction.TransactionManager.begin(TransactionManager.java:46)
at com.ibatis.sqlmap.engine.transaction.TransactionManager.begin(TransactionManager.java:39)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.startTransaction(SqlMapExecutorDelegate.java:726)
... 11 more

Caused by:
com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not start a new transaction.  A transaction is already started.
at com.ibatis.sqlmap.engine.transaction.TransactionManager.begin(TransactionManager.java:46)
at com.ibatis.sqlmap.engine.transaction.TransactionManager.begin(TransactionManager.java:39)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.startTransaction(SqlMapExecutorDelegate.java:726)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.startTransaction(SqlMapSessionImpl.java:125)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.startTransaction(SqlMapClientImpl.java:102)
at com.vodone.cpms.dao.impl.MessageDaoImpl.addMessages(MessageDaoImpl.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.ibatis.dao.engine.impl.DaoProxy.invoke(DaoProxy.java:72)
at $Proxy1.addMessages(Unknown Source)
at com.vodone.cpms.service.MessageService.addMessages(MessageService.java:26)
at com.vodone.cpms.service.MessageService.main(MessageService.java:70)

Caused by:
com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not start a new transaction.  A transaction is already started.
at com.ibatis.sqlmap.engine.transaction.TransactionManager.begin(TransactionManager.java:46)
at com.ibatis.sqlmap.engine.transaction.TransactionManager.begin(TransactionManager.java:39)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.startTransaction(SqlMapExecutorDelegate.java:726)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.startTransaction(SqlMapSessionImpl.java:125)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.startTransaction(SqlMapClientImpl.java:102)
at com.vodone.cpms.dao.impl.MessageDaoImpl.addMessages(MessageDaoImpl.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.ibatis.dao.engine.impl.DaoProxy.invoke(DaoProxy.java:72)
at $Proxy1.addMessages(Unknown Source)
at com.vodone.cpms.service.MessageService.addMessages(MessageService.java:26)
at com.vodone.cpms.service.MessageService.main(MessageService.java:70)
Exception in thread "main" com.ibatis.dao.client.DaoException: Error committing SQL Map transaction.  Cause: com.ibatis.common.jdbc.exception.NestedSQLException: Could not commit transaction.  Cause: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not commit.  No transaction is started.
Caused by: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not commit.  No transaction is started.
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException: Could not commit transaction.  Cause: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not commit.  No transaction is started.
Caused by: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not commit.  No transaction is started.
at com.ibatis.dao.engine.transaction.sqlmap.SqlMapDaoTransaction.commit(SqlMapDaoTransaction.java:43)
at com.ibatis.dao.engine.transaction.sqlmap.SqlMapDaoTransactionManager.commitTransaction(SqlMapDaoTransactionManager.java:75)
at com.ibatis.dao.engine.impl.DaoContext.commitTransaction(DaoContext.java:101)
at com.ibatis.dao.engine.impl.DaoProxy.invoke(DaoProxy.java:73)
at $Proxy1.addMessages(Unknown Source)
at com.vodone.cpms.service.MessageService.addMessages(MessageService.java:26)
at com.vodone.cpms.service.MessageService.main(MessageService.java:70)
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException: Could not commit transaction.  Cause: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not commit.  No transaction is started.
Caused by: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not commit.  No transaction is started.
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.commitTransaction(SqlMapExecutorDelegate.java:761)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.commitTransaction(SqlMapSessionImpl.java:133)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.commitTransaction(SqlMapClientImpl.java:110)
at com.ibatis.dao.engine.transaction.sqlmap.SqlMapDaoTransaction.commit(SqlMapDaoTransaction.java:40)
... 6 more
Caused by: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not commit.  No transaction is started.
at com.ibatis.sqlmap.engine.transaction.TransactionManager.commit(TransactionManager.java:80)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.commitTransaction(SqlMapExecutorDelegate.java:759)
... 9 more

Caused by:
com.ibatis.common.jdbc.exception.NestedSQLException: Could not commit transaction.  Cause: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not commit.  No transaction is started.
Caused by: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not commit.  No transaction is started.
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.commitTransaction(SqlMapExecutorDelegate.java:761)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.commitTransaction(SqlMapSessionImpl.java:133)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.commitTransaction(SqlMapClientImpl.java:110)
at com.ibatis.dao.engine.transaction.sqlmap.SqlMapDaoTransaction.commit(SqlMapDaoTransaction.java:40)
at com.ibatis.dao.engine.transaction.sqlmap.SqlMapDaoTransactionManager.commitTransaction(SqlMapDaoTransactionManager.java:75)
at com.ibatis.dao.engine.impl.DaoContext.commitTransaction(DaoContext.java:101)
at com.ibatis.dao.engine.impl.DaoProxy.invoke(DaoProxy.java:73)
at $Proxy1.addMessages(Unknown Source)
at com.vodone.cpms.service.MessageService.addMessages(MessageService.java:26)
at com.vodone.cpms.service.MessageService.main(MessageService.java:70)
Caused by: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not commit.  No transaction is started.
at com.ibatis.sqlmap.engine.transaction.TransactionManager.commit(TransactionManager.java:80)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.commitTransaction(SqlMapExecutorDelegate.java:759)
... 9 more

Caused by:
com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not commit.  No transaction is started.
at com.ibatis.sqlmap.engine.transaction.TransactionManager.commit(TransactionManager.java:80)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.commitTransaction(SqlMapExecutorDelegate.java:759)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.commitTransaction(SqlMapSessionImpl.java:133)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.commitTransaction(SqlMapClientImpl.java:110)
at com.ibatis.dao.engine.transaction.sqlmap.SqlMapDaoTransaction.commit(SqlMapDaoTransaction.java:40)
at com.ibatis.dao.engine.transaction.sqlmap.SqlMapDaoTransactionManager.commitTransaction(SqlMapDaoTransactionManager.java:75)
at com.ibatis.dao.engine.impl.DaoContext.commitTransaction(DaoContext.java:101)
at com.ibatis.dao.engine.impl.DaoProxy.invoke(DaoProxy.java:73)
at $Proxy1.addMessages(Unknown Source)
at com.vodone.cpms.service.MessageService.addMessages(MessageService.java:26)
at com.vodone.cpms.service.MessageService.main(MessageService.java:70)




晕,可我没找到那里开始事务了啊。
我发现ibatis的batch自动提交了每次的数据库操作,所以当操作发生异常时,怎么样能实现事务的回滚,我自己加的事务又不能执行,郁闷。帖子还被评为新手贴,更打击人了。是啊自己刚用ibatis,不够强啊。
那为大侠对ibatis的batch比较熟,同事又能进行事务管理,请多指点。
小弟不盛感激!!!!
  

最后补充一句,我是用的mysql数据库。
分享到:
评论
3 楼 gaoxing_china 2007-05-21  
我想问一下Mysql数据库的事务管理怎么实现,谢谢!
2 楼 spiritfrog 2007-05-18  
提示信息已经很明显了,请检查事务已经在什么别的地方开启?
1 楼 gemscorpio 2007-05-18  
TransactionManager could not start a new transaction. A transaction is already started.

相关推荐

    ibatis 批量 增删改查

    ibatis 批量 增删改查

    ibatis应对批量update

    最近遇到需要批量update数据的问题,一开始用了一个for循环去update,数据量大的时候效率很低。原因是for循环每次update一条语句,都是一次连接...在google上找了一遍,发现ibatis里有对批量update的支持,挺好的东西。

    ibatis批量存储

    ibatis批量存储

    ibatis批量处理

    ibatis批量处理操作实现,以及sping中需要注意点

    ibatis代码自动生成

    ibatis代码自动生成,ibatis代码自动生成,ibatis代码自动生成,ibatis代码自动生成

    ibatis3批量插入

    通过Ibatis3xml文件配置+Mysql实现数据批量插入,原先在网上找很多,都是关于批量更新,批量插入的很少,而且其写法又完全不同,所以自己研究了一下。可供参考。另外插入时如出现内容报错,请参照my.cnf修改书库配置...

    ibatis代码自动生成代码程序

    ibatis代码自动生成代码程序,有现成的例子,只要将配制文件中的数据库连接连接和数据库表名、实体类名、包名修改在你想要的就可以,1分钟内搞定,实体类。

    ibatis mybatis crud 完整代码

    ibatis mybatis crud 完整代码

    IBATIS3代码生成器

    IBATIS3代码生成器 ibatis,Ibator,Abator

    mysql,jdbc详解,与ibatis对比。批量查询,分页处理。

    mysq增删改查,jdbc 驱动加载 各个类和接口详解,与ibatis对比。批量查询,分页处理。

    利用ibatis 生成代码

    充分利用ibatis 框架,能解决体力劳动,自动生成代码。

    ibatis自动生成代码工具

    1. 提供的jar包可以直接运行并进行可视化操作和配置; 2. 本工具的主要功能是:根据您指定的数据库地址选择表或自定义属性信息(文件),生成对应的pojo类和ibatis配置文件; 3. 目前支持的较好的是mysql数据库...

    ibatis批量删除的方法.docx

    ibatis批量删除的方法.docx

    Ibatis/mybatis代码生成工具

    ibatis 和 mybatis 的代码生成工具

    ibatis基本操作数据库

    在用iBatis.net与数据库打交道的过程中,发现iBatis.net拼接字符串不能直接拷贝然后在dbms里执行

    ibatis sqlserver代码自动生成

    网上关于ibatis代码自动生成的例子不少,但是让人还是感到一头雾水,本文附添加过程以及基础包。

    ibatis源代码

    ibatis源代码,ibatis是一款半自动化的or映射开发框架,

    Ibatis源代码(ibatis-src.zip)

    这个是Ibatis的源代码.

    iBATIS开放源代码

    iBATIS一词来源于“internet”和“abatis”的组合,是一个由ClintonBegin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基...

    ibatis代码生成工具

    ibatis代码生成工具。iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。于2010年6月16号被谷歌托管,改名为MyBatis。是一个基于SQL映射支持Java和.NET的持久层...

Global site tag (gtag.js) - Google Analytics