0 0

iBatis的数据回滚5

在一次操作中要同时向三张表中插入数据,并且这三张表是相互关联的,也就是说如果发现某次添加操作并未完成对三张表的插入,那么我需要做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这个属性,我觉得是没有问题的,可能问题出在上边的代码了。可又不知道如何修改,唉,愁!

2008年12月09日 10:46

2个答案 按时间排序 按投票排序

0 0

应该是SqlMap的XML里,insert一段的Where条件中的某个参数 ## 中有问题,
可能是Bean中的属性是null之类的。

2008年12月09日 19:48
0 0

最好把你的sqlmap也发出来

2008年12月09日 11:05

相关推荐

    Spring+ibatis 保留ibatis事务的配置

    给定的XML配置文件展示了如何在Spring中配置ibatis数据源以及ibatis事务管理器。首先,注释掉的`BasicDataSource`部分是用来配置数据源的,这里没有启用,而是选择了使用JNDI数据源。实际生产环境中,通常会使用...

    ibatis实现数据的操作

    本篇文章将详细讲解如何利用Ibatis实现数据的连接、增加、查询、删除和修改(CRUD)操作,以及.xml文件在SQL映射中的作用。 首先,Ibatis是一个轻量级的Java ORM(对象关系映射)框架,它的核心理念是将SQL语句与...

    ibatis

    - 事务回滚(如`Spring实现iBATIS事务回滚.htm`):在Spring中,如果在事务范围内发生异常,Spring会自动回滚事务,保证数据一致性。 - 事务配置问题(如`spring&ibatis事务配置问题.htm`):整合过程中常见的问题...

    iBATIS操作Oracle CLOB数据

    7. **事务管理**:由于CLOB操作可能会涉及到较大的数据量,确保正确设置事务的隔离级别和回滚规则,以防止数据不一致。 综上所述,通过iBATIS操作Oracle的CLOB数据,需要对iBATIS的映射文件、类型处理器以及Oracle...

    iBATIS-DAO-2.3.4.726.rar_com.ibatis.dao_iBATIS dao 2_iBatis DAO_

    iBATIS DAO是Java开发中的一个持久层框架,它提供了数据访问对象(DAO)的实现,使得数据库操作更加简单和灵活。在这个2.3.4.726版本的源码中,我们可以深入理解iBATIS DAO的工作原理,并通过添加注释来帮助我们更好...

    ibatis api 帮助文档+IBATIS 开发文档

    IBATIS,一个由iBATIS公司开发的开源持久层框架,是Java世界中广泛使用的数据访问接口(DAO)工具。它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java代码的分离,提高了开发效率和数据库移植性。本篇将...

    ibatis教程,ibatis帮助文档

    4. 事务:iBATIS支持事务管理,可以在配置文件中定义事务的隔离级别和回滚规则,确保数据的一致性。 总结起来,iBATIS是一个强大且灵活的持久化框架,它的主要优点在于将SQL语句的控制权交给开发者,同时提供了代码...

    ibatis 连接字符串 SqlMapConfig.xml

    这个文件是iBATIS的核心配置文件,它包含了数据源、事务管理器、SQL映射文件等信息,确保了应用程序能够正确地连接到数据库并执行SQL语句。 在SqlMapConfig.xml中,最重要的部分是数据库连接的配置,通常包括以下几...

    ibatis api,ibatis文档,ibatis说明文档

    Ibatis API是Ibatis的核心接口和类,提供了丰富的功能供开发者进行数据访问。以下是一些关键的API组件: 1. SqlSessionFactory:这是Ibatis的工厂类,用于创建SqlSession对象,它是执行数据库操作的入口点。...

    Spring+Struts+ibatis下配置数据读写分离及事务(一)

    本文将深入探讨如何在Spring、Struts和iBATIS这三大流行框架的集成环境中实现数据读写分离以及事务控制。我们将不涉及具体的代码实现,而是侧重于理论背景和设计原则。 首先,让我们理解数据读写分离的概念。数据...

    ibatis2.3.4.rar

    4. 实现数据访问:在业务逻辑代码中,通过SqlSession的openSession()方法开启会话,然后调用Mapper接口的方法执行SQL,最后提交或回滚事务。 5. 动态SQL:Ibatis的动态SQL功能非常强大,你可以根据条件动态构建...

    Ibatis 入门经典 实例

    相较于传统的 JDBC,Ibatis 提供了更灵活的数据访问层,使得数据库操作更加简洁高效。 二、Ibatis 安装与配置 1. 添加依赖:在 Maven 项目中,需要在 `pom.xml` 文件中添加 Ibatis 的依赖。 2. 配置文件:创建 `...

    iBATIS2.3.4 jar包及源码

    5. 事务管理:iBATIS提供了事务控制机制,可以在应用中方便地进行事务开始、提交和回滚。 6. 对象关系映射(ORM):虽然iBATIS不完全是一个ORM框架,但它允许开发者将数据库记录映射到Java对象,简化了数据操作。 ...

    SPRING IBATIS 保留IBATIS事务的配置方式

    保留iBatis事务管理的主要优势在于能够更灵活地控制事务的提交或回滚时机,这对于需要对事务有更精细控制的应用场景非常有用。例如,在某些复杂的业务逻辑中,可能需要在多个数据库操作之间插入自定义的逻辑处理,...

    ibatis2.rar

    4. 事务管理:iBATIS可以结合Spring进行事务控制,实现自动提交和回滚。 5. 执行器Executor:简单执行器和复用执行器的区别,以及它们在不同场景下的选择。 6. 缓存机制:理解iBATIS的一级缓存和二级缓存,提高数据...

    IBatis.net-IBatis.DataAccess.1.9.2/IBatis.DataMapper.1.6.2

    2. **事务管理**:支持自动和手动的事务提交、回滚,确保数据一致性。 3. **数据库适配器**:为多种数据库(如MySQL、Oracle、SQL Server等)提供适配,使代码具有更好的可移植性。 4. **数据访问接口**:提供统一的...

    ibatis系列 详细介绍

    4. **事务管理**:讲解如何使用iBATIS进行事务控制,包括手动和自动提交/回滚事务。 5. **缓存机制**:分析iBATIS的缓存功能,包括本地缓存和二级缓存,提高数据读取效率。 6. **动态SQL**:介绍如何利用iBATIS的...

    ibatis学习完整实例,例子

    通过Ibatis的TransactionManager,我们可以控制事务的开启、提交、回滚等行为,确保数据的一致性。在"ibatistest2"项目中,我们可以看到如何结合Spring框架进行事务管理,这对于大型项目尤其重要。 通过深入学习和...

    ibatis 开发指南 和 iBATIS-SqlMaps两本图书

    8. **事务管理**:讨论iBATIS如何处理数据库事务,包括自动提交、手动提交和回滚操作。 9. **错误处理与调试**:分享如何排查和解决iBATIS在实际使用过程中遇到的问题。 10. **最佳实践**:提供一些关于如何优化...

Global site tag (gtag.js) - Google Analytics