zoukankan      html  css  js  c++  java
  • mybatis update数据时无异常但没更新成功;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();
        }

    事务回滚。

  • 相关阅读:
    服务器性能剖析
    事务
    计算机中信息表示
    Git初识
    Redis 概述
    Jedis源码浅析
    Spring 初识
    责任链模式
    观察者模式
    【支付签名失败问题】
  • 原文地址:https://www.cnblogs.com/dongzhuangdian/p/9446407.html
Copyright © 2011-2022 走看看