文档章节

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

陶邦仁
 陶邦仁
发布于 2015/12/26 16:53
字数 372
阅读 870
收藏 11

#1 问题描述# 通过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&amp;characterEncoding=utf-8&amp;allowMultiQueries=true" />

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

© 著作权归作者所有

共有 人打赏支持
陶邦仁
粉丝 1587
博文 420
码字总数 1483822
作品 0
海淀
技术主管
mybatis 批量插入的两种方式

一、mybiats foreach标签 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。item表示集合中...

追梦的南瓜
2016/09/03
3.8K
1
mybatis批量更新

1.先看DAO层 ? 1 2 3 4 5 6 publicvoidupdateList(List<AddService> oldAddServiceList) { SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH,true); session.update......

tantexian
2016/04/07
150
0
mybaits 动态SQL语句

-------------------------动态查询--------------------------------------- <select id="findAll" parameterType="map" resultMap="studentMap"> select * from students <where> <if tes......

李永china
2016/05/11
116
0
mybatis 批量更新返回条数的问题

最近使用mybatis的问题,在批量insert、批量删除时都可以完成,并且能返回结果条数。 但是使用批量update时,操作成功,数据也更新了,但是只返回1。 sql: updatetest test=${item.test}+1 ...

wangaowell
2015/10/22
716
0
mybatis批量操作问题总结

1、mybatis接受list参数问题 在http://mybatis.github.io/mybatis-3/zh/dynamic-sql.html#foreach里有一段说明: 写道 注意 你可以传递一个 List 实例或者数组作为参数对象传给 MyBatis。当你...

Elivense
2016/11/30
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

bat强制启用宏

运行bat文件后,将宏的安全等级设为低,达到启用宏的目的。 REM 这个文件将提供用户快速设置Excel宏的安全等级@ECHO OFFCLS:cmd4REG ADD "HKEY_CURRENT_USER\Software\Mi...

tedzheng
6分钟前
0
0
流,用声明性的方式处理数据集 - 读《Java 8实战》

引入流 Stream API的代码 声明性 更简洁,更易读 可复合 更灵活 可并行 性能更好 流是什么? 它允许以声明方式处理数据集合 遍历数据集的高级迭代器 透明地并行处理 简短定义:从支持数据处理...

yysue
7分钟前
0
0
postman发送json格式的post请求

postman发送json格式的post请求 在地址栏里输入请求url:http://127.0.0.1:8081/getmoney 选择“POST”方式, 在“headers”添加key:Content-Type , value:application/json 点击"body",''ra...

两广总督bogang
14分钟前
0
0
Javascript将html转成pdf,下载(html2canvas 和 jsPDF)

最近碰到个需求,需要把当前页面生成pdf,并下载。弄了几天,自己整理整理,记录下来,我觉得应该会有人需要 :) 项目源码地址:https://github.com/linwalker/render-html-to-pdf html2ca...

孟飞阳
14分钟前
0
0
pureftp源码编译及设定

--- use for RHEL 567 and Ubuntu 1604 1. download pureftpd wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.47.tar.bz2 2. install gcc #apt-get install -y li......

zzimac
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部