mybatis update数据时无异常但没更新成功

没更新的问题原因:

sqlSession.commit();

没执行commit,但官方文档里有这样的描述:“默认情况下 MyBatis 不会自动提交事务,除非它侦测到有插入、更新或删除操作改变了数据库。”

源码:

<update id="updateTest" parameterType="cn.td.user.TestModel"> //TestModel是一个JavaBean
 update test_table set test_case_suc_num = #{test_case_suc_num} where test_name = #{test_name} </update>
    public void updateAllInfo(List<TestModel> list) throws IOException{
        SqlSessionFactory sqlSessionFactory = getSqlFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        for(TestModel testModel : list){
            System.out.println(testModel);
            sqlSession.update("cn.td.dao.updatetest",testModel);
            sqlSession.commit();
        }
        sqlSession.close();
    }

以上的java代码中update异常会造成  数据库死锁,导致下次无法正常更新。

死锁的概念就是类似git中的lock,操作残留 或者 互斥。

解决办法:

public void updateAllInfo(List<TestModel> list) throws IOException{
        SqlSessionFactory sqlSessionFactory = getSqlFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        for(TestModel testModel : list){
            System.out.println(testModel);

            try {
                sqlSession.update("cn.td.dao.updatetest",testModel);
            } catch (Exception e) {
                sqlSession.rollback();
                e.printStackTrace();
            }

            sqlSession.commit();
        }
        sqlSession.close();
    }

事务回滚。

原文地址:https://www.cnblogs.com/dongzhuangdian/p/9446407.html

时间: 2024-11-08 12:23:03

mybatis update数据时无异常但没更新成功的相关文章

OpenCV访问Mat对象中数据时发生异常---Mat中的数据访问

7.1和7.1.1由于越狱不成熟,半完美越狱后电脑上无法访问系统越狱目录,如var usr 等等. 今天有些意外地发现,可以在电脑上使用手机的越狱目录我手机 i4 7.1.1 联通 半完美越狱,没装Afc2Add,也没装Appsync 附上  --->我的半完美越狱过程 好了,下面直接正题 一.前提,必须安装ifile! 打开ifile,并转到 /var/mobile/media 目录下,然后点击右上角的 [ 编辑 ]如图: 二.点左下角的 + 号创建,如图: 三.点 [ 类型],选择[符号链接

更新数据时如何使时间自动更新

更新数据时不能使用time类型 使用timestamp类型才可以自动获取当前系统时间 TIMESTAMP的变体 1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP  在创建新记录和修改现有记录的时候都对这个数据列刷新 2,TIMESTAMP DEFAULT CURRENT_TIMESTAMP  在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它 3,TIMESTAMP ON UPDATE CURRE

Springmvc UPDATE 数据时 ORA-01858:a non-numeric character was found where a numeric was expected

ORA-01858:a non-numeric character was found where a numeric was expected 异常. 我的代码: 主要是绑定变量带出来的问题. 出错原因是:preparedstatement在执行的时候不能把带有to_date的参数的串替换为sql中的问号,主要是to_date函数替换不了,解决办法是将to_date函数先放到sql语句中,然后替换后面的变量,就不报这个错误了. 错误异常:  修改后的代码: 参考: http://blog.cs

Hibernate 批量update数据时,怎么样做可以回滚,

1.serviceManagerDaoImpl代码里对异常不进行try,catch抛出, 2.或者抛出throw new RuntimeException()异常

mybatis新增数据时获取自增id

在insert的标签里加两个属性:useGeneratedKeys="true"         keyProperty="patentId"   ,这个keyProperty的patentId就是我们要返回的主键id 原文地址:https://www.cnblogs.com/yxj9536/p/11214998.html

关于Oracle10G在库内导数据时,用到的更新语句----ZT

两种方法: -- 方法1. UPDATE  表2 SET   表2.C  =  (SELECT  B  FROM  表1  WHERE   表1.A = 表2.A) WHERE   EXISTS ( SELECT 1 FROM   表1  WHERE   表1.A = 表2.A)    -- 方法2 MERGE INTO 表2  USING 表1 ON ( 表2.A = 表1.A )    -- 条件是 A 相同 WHEN MATCHED THEN UPDATE SET 表2.C = 表1.B 

MyBatis框架——mybatis插入数据返回主键(mysql、oracle)

向数据库中插入数据时,大多数情况都会使用自增列或者UUID做为主键.主键的值都是插入之前无法知道的,但很多情况下我们在插入数据后需要使用刚刚插入数据的主键,比如向两张关联表A.B中插入数据(A的主键是B的外键),向A表中插入数据之后,向B表中插入数据时需要用到A的主键. 比如添加一个用户,同时返回插入用户后得到的用户id: /** * 添加用户信息 * @param user * @throws Exception */ public int insertUser(User user) thro

批量update数据

今天开发要更新一批数据,等了很久也没更新成功.找到了我,我在网上找了一下资料,发现在用rowid的方式更新最快,参照下面的文章更新成功,记录一下 DAVE文章链接:http://blog.csdn.net/tianlesoftware/article/details/6576156 原来的SQL: update t_canhe_member_info a set a.id_card = (select b.id_card from BBB_EEE b where a.member_no = b.

MSSQL 插入数据时候,如果存在则更新的方法分享

摘要:下文讲述MSSQL中,插入数据时,如果存在则更新,否则就插入数据的方法分享实验环境:sql server 2017 mssql中,我们可以采用 MERGE INTO 关键字实现此功能,当两者匹配成功,则运行***语句,否则运行其它语句,达到插入数据时的判断操作,具体操作方法如下所示: create table [maomao365.com] (keyId int identity, info varchar(80) ) go insert into [maomao365.com] (inf