MyBatis Batch Update Exception使用foreach批量update出错

栏目: Java · 发布时间: 8年前

内容简介:MyBatis Batch Update Exception使用foreach批量update出错

通过MyBatis框架,对 Mysql 数据库做批量更新,对于的Mapper.xml配置:

<update id="updateTestcaseNodeBatch" parameterType="List">  
  <foreach collection="list" item="nodeVO" separator=";">  
    UPDATE testcase_node  
     <set>  
       name=#{nodeVO.name},  
       version=#{nodeVO.version},  
       description=#{nodeVO.description},  
       last_modify_user=#{nodeVO.createUser},  
       last_modify_time=#{nodeVO.createTime}  
     </set>  
     <where>  
       object_id=#{nodeVO.objectId} AND root_id=#{nodeVO.rootId}  
     </where>  
  </foreach>  
</update>

异常信息:

### The error may involve com.hirain.testmanagement.mapper.TestcaseNodeMapper.updateTestcaseNodeBatch-Inline
### The error occurred while setting parameters
### SQL: UPDATE testcase_node       SET name=?,        version=?,        description=?,        last_modify_user=?,        last_modify_time=?        WHERE object_id=? AND root_id=?     ;      UPDATE testcase_node       SET name=?,        version=?,        description=?,        last_modify_user=?,        last_modify_time=?        WHERE object_id=? AND root_id=?
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; 
    UPDATE testcase_node
      SET name='Türstatus',
       version=4,
     ' at line 8
; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; 
    UPDATE testcase_node
      SET name='Türstatus',
       version=4,
     ' at line 8
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:233)

2 排除过程

  1. 仔细检查 map文件 和数据库表字段没有错误;【正常】
  2. 将生产的SQL,贴到Mysql Client端执行;【正常】
  3. 再次检查JDBC驱动链接URL;【不正常】

3 解决问题

最终结果是 因为配置的 mysql jdbc链接字符串 默认不支持一次性执行多个 sql 语句 ;但是在我们的 update map中需要执行多个 update语句。最后加上参数 "allowMultiQueries" 设置为true 如下:

<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true" />

4 总结问题

问题解决!关键是解决问题的思路,由易到难,有外到内,确保最基本的配置不出问题。


以上所述就是小编给大家介绍的《MyBatis Batch Update Exception使用foreach批量update出错》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Compilers

Compilers

Alfred V. Aho、Monica S. Lam、Ravi Sethi、Jeffrey D. Ullman / Addison Wesley / 2006-9-10 / USD 186.80

This book provides the foundation for understanding the theory and pracitce of compilers. Revised and updated, it reflects the current state of compilation. Every chapter has been completely revised ......一起来看看 《Compilers》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具