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数据库。
分享到:
- 2007-05-18 17:50
- 浏览 5266
- 评论(3)
- 论坛回复 / 浏览 (3 / 8629)
- 查看更多
相关推荐
ibatis 批量 增删改查
最近遇到需要批量update数据的问题,一开始用了一个for循环去update,数据量大的时候效率很低。原因是for循环每次update一条语句,都是一次连接...在google上找了一遍,发现ibatis里有对批量update的支持,挺好的东西。
ibatis批量存储
ibatis批量处理操作实现,以及sping中需要注意点
ibatis代码自动生成,ibatis代码自动生成,ibatis代码自动生成,ibatis代码自动生成
通过Ibatis3xml文件配置+Mysql实现数据批量插入,原先在网上找很多,都是关于批量更新,批量插入的很少,而且其写法又完全不同,所以自己研究了一下。可供参考。另外插入时如出现内容报错,请参照my.cnf修改书库配置...
ibatis代码自动生成代码程序,有现成的例子,只要将配制文件中的数据库连接连接和数据库表名、实体类名、包名修改在你想要的就可以,1分钟内搞定,实体类。
ibatis mybatis crud 完整代码
IBATIS3代码生成器 ibatis,Ibator,Abator
mysq增删改查,jdbc 驱动加载 各个类和接口详解,与ibatis对比。批量查询,分页处理。
充分利用ibatis 框架,能解决体力劳动,自动生成代码。
1. 提供的jar包可以直接运行并进行可视化操作和配置; 2. 本工具的主要功能是:根据您指定的数据库地址选择表或自定义属性信息(文件),生成对应的pojo类和ibatis配置文件; 3. 目前支持的较好的是mysql数据库...
ibatis批量删除的方法.docx
ibatis 和 mybatis 的代码生成工具
在用iBatis.net与数据库打交道的过程中,发现iBatis.net拼接字符串不能直接拷贝然后在dbms里执行
网上关于ibatis代码自动生成的例子不少,但是让人还是感到一头雾水,本文附添加过程以及基础包。
ibatis源代码,ibatis是一款半自动化的or映射开发框架,
这个是Ibatis的源代码.
iBATIS一词来源于“internet”和“abatis”的组合,是一个由ClintonBegin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基...
ibatis代码生成工具。iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。于2010年6月16号被谷歌托管,改名为MyBatis。是一个基于SQL映射支持Java和.NET的持久层...