在一次操作中要同时向三张表中插入数据,并且这三张表是相互关联的,也就是说如果发现某次添加操作并未完成对三张表的插入,那么我需要做rollback操作。这样我用到了如下方法:
public void bussinessBatchData(List list) throws SQLException {
SqlMapClient sqlMapClient = this.getSqlMapClient();
Connection c = null;
try {
c = sqlMapClient.getDataSource().getConnection();
c.setAutoCommit(false);
sqlMapClient.setUserConnection(c);
for (Iterator it = list.iterator(); it.hasNext();) {
BussinessBatch bussinessBatch = (BussinessBatch) it.next();
String operate = bussinessBatch.getOperate();
if ("INSERT".equals(operate)) {
sqlMapClient.insert(bussinessBatch.getString(), bussinessBatch
.getObject());
} else if ("DELETE".equals(operate)) {
sqlMapClient.delete(bussinessBatch.getString(), bussinessBatch
.getObject());
} else if ("UPDATE".equals(operate)) {
sqlMapClient.update(bussinessBatch.getString(), bussinessBatch
.getObject());
} else {
// do nothing!
}
}
c.commit();
} catch (SQLException e) {
try {
c.rollback();
} catch (Exception et) {
}
throw e;
} finally {
try {
c.setAutoCommit(true);
c.close();
} catch (Exception et) {
}
}
}
其中list中含有sql的操作类型(insert/delete/update),sql语句(配在iBatis配置文件),以及sql语句操作所需要的参数,可是问题产生了,我用这个方法,操作一次没有问题,可再接着再进行一次操作(添加),就会报异常:
2008-12-09 09:45:24 org.springframework.transaction.interceptor.TransactionInterceptor DEBUG Completing transaction for [com.aa.bb.service.Service.bussinessBatchData] after exception: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in com/aa/bb/sqlmapdao/sql/ut/UT.xml.
--- The error occurred while applying a parameter map.
--- Check the UT.insert-InlineParameterMap.
--- Check the parameter mapping for the 'Id' property.
--- Cause: java.sql.SQLException: org.apache.commons.dbcp.DelegatingPreparedStatement is closed.
不知道问题出在哪里,至于说让我检查Id这个属性,我觉得是没有问题的,可能问题出在上边的代码了。可又不知道如何修改,唉,愁!
相关推荐
给定的XML配置文件展示了如何在Spring中配置ibatis数据源以及ibatis事务管理器。首先,注释掉的`BasicDataSource`部分是用来配置数据源的,这里没有启用,而是选择了使用JNDI数据源。实际生产环境中,通常会使用...
本篇文章将详细讲解如何利用Ibatis实现数据的连接、增加、查询、删除和修改(CRUD)操作,以及.xml文件在SQL映射中的作用。 首先,Ibatis是一个轻量级的Java ORM(对象关系映射)框架,它的核心理念是将SQL语句与...
- 事务回滚(如`Spring实现iBATIS事务回滚.htm`):在Spring中,如果在事务范围内发生异常,Spring会自动回滚事务,保证数据一致性。 - 事务配置问题(如`spring&ibatis事务配置问题.htm`):整合过程中常见的问题...
7. **事务管理**:由于CLOB操作可能会涉及到较大的数据量,确保正确设置事务的隔离级别和回滚规则,以防止数据不一致。 综上所述,通过iBATIS操作Oracle的CLOB数据,需要对iBATIS的映射文件、类型处理器以及Oracle...
iBATIS DAO是Java开发中的一个持久层框架,它提供了数据访问对象(DAO)的实现,使得数据库操作更加简单和灵活。在这个2.3.4.726版本的源码中,我们可以深入理解iBATIS DAO的工作原理,并通过添加注释来帮助我们更好...
IBATIS,一个由iBATIS公司开发的开源持久层框架,是Java世界中广泛使用的数据访问接口(DAO)工具。它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java代码的分离,提高了开发效率和数据库移植性。本篇将...
4. 事务:iBATIS支持事务管理,可以在配置文件中定义事务的隔离级别和回滚规则,确保数据的一致性。 总结起来,iBATIS是一个强大且灵活的持久化框架,它的主要优点在于将SQL语句的控制权交给开发者,同时提供了代码...
这个文件是iBATIS的核心配置文件,它包含了数据源、事务管理器、SQL映射文件等信息,确保了应用程序能够正确地连接到数据库并执行SQL语句。 在SqlMapConfig.xml中,最重要的部分是数据库连接的配置,通常包括以下几...
Ibatis API是Ibatis的核心接口和类,提供了丰富的功能供开发者进行数据访问。以下是一些关键的API组件: 1. SqlSessionFactory:这是Ibatis的工厂类,用于创建SqlSession对象,它是执行数据库操作的入口点。...
本文将深入探讨如何在Spring、Struts和iBATIS这三大流行框架的集成环境中实现数据读写分离以及事务控制。我们将不涉及具体的代码实现,而是侧重于理论背景和设计原则。 首先,让我们理解数据读写分离的概念。数据...
4. 实现数据访问:在业务逻辑代码中,通过SqlSession的openSession()方法开启会话,然后调用Mapper接口的方法执行SQL,最后提交或回滚事务。 5. 动态SQL:Ibatis的动态SQL功能非常强大,你可以根据条件动态构建...
相较于传统的 JDBC,Ibatis 提供了更灵活的数据访问层,使得数据库操作更加简洁高效。 二、Ibatis 安装与配置 1. 添加依赖:在 Maven 项目中,需要在 `pom.xml` 文件中添加 Ibatis 的依赖。 2. 配置文件:创建 `...
5. 事务管理:iBATIS提供了事务控制机制,可以在应用中方便地进行事务开始、提交和回滚。 6. 对象关系映射(ORM):虽然iBATIS不完全是一个ORM框架,但它允许开发者将数据库记录映射到Java对象,简化了数据操作。 ...
保留iBatis事务管理的主要优势在于能够更灵活地控制事务的提交或回滚时机,这对于需要对事务有更精细控制的应用场景非常有用。例如,在某些复杂的业务逻辑中,可能需要在多个数据库操作之间插入自定义的逻辑处理,...
4. 事务管理:iBATIS可以结合Spring进行事务控制,实现自动提交和回滚。 5. 执行器Executor:简单执行器和复用执行器的区别,以及它们在不同场景下的选择。 6. 缓存机制:理解iBATIS的一级缓存和二级缓存,提高数据...
2. **事务管理**:支持自动和手动的事务提交、回滚,确保数据一致性。 3. **数据库适配器**:为多种数据库(如MySQL、Oracle、SQL Server等)提供适配,使代码具有更好的可移植性。 4. **数据访问接口**:提供统一的...
4. **事务管理**:讲解如何使用iBATIS进行事务控制,包括手动和自动提交/回滚事务。 5. **缓存机制**:分析iBATIS的缓存功能,包括本地缓存和二级缓存,提高数据读取效率。 6. **动态SQL**:介绍如何利用iBATIS的...
通过Ibatis的TransactionManager,我们可以控制事务的开启、提交、回滚等行为,确保数据的一致性。在"ibatistest2"项目中,我们可以看到如何结合Spring框架进行事务管理,这对于大型项目尤其重要。 通过深入学习和...
8. **事务管理**:讨论iBATIS如何处理数据库事务,包括自动提交、手动提交和回滚操作。 9. **错误处理与调试**:分享如何排查和解决iBATIS在实际使用过程中遇到的问题。 10. **最佳实践**:提供一些关于如何优化...