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();
        }

    事务回滚。

  • 相关阅读:
    LeetCode:删除有序数组中的重复项
    ABAP新语法之内联声明
    SAL实战练习-全选及按钮事件等
    固定资产创建BAPI_FIXEDASSET_CREATE--含扩展结构字段EXTENSIONIN
    SAP-采购订单-数据输入校验
    外围系统传SAP---OUT2SAP接口测试
    SAP2OUT异步接口测试
    SAP2OUT同步接口测试
    SAP-批量创建货源清单
    BDC-用户锁定及有效期设置程序
  • 原文地址:https://www.cnblogs.com/dongzhuangdian/p/9446407.html
Copyright © 2011-2022 走看看