`
king123654789
  • 浏览: 286597 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多
源地址   http://quabr.com/22829539/mybatis-batch-update-exception

使用如下Mybatis  map 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)


仔细检查 map文件 和数据库表字段没有错误

最终结果是因为 配置的 mysql jdbc 链接字符串 默认不支持一次性执行多个sql 语句;

但是在我们的 update map中需要执行多个 update语句。

最后加上参数 "allowMultiQueries" 设置为true  如下:

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


问题解决!
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics