文档章节

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

陶邦仁
 陶邦仁
发布于 2015/12/26 16:53
字数 372
阅读 895
收藏 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 总结问题# 问题解决!关键是解决问题的思路,由易到难,有外到内,确保最基本的配置不出问题。

© 著作权归作者所有

共有 人打赏支持
陶邦仁
粉丝 1611
博文 420
码字总数 1483887
作品 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
mybatis 批量更新返回条数的问题

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

wangaowell
2015/10/22
716
0
mybaits 动态SQL语句

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

李永china
2016/05/11
116
0
mybatis 批量Update(1)

尽量少用或者不用此方法,因为此方法实际上是根据你的记录数,然后组装出N条更新语句, 当然如果你的数据量很少,那就勉强用一下吧 推荐使用的方法见另一篇博客 mybatis 批量Update(2) 这个批量更...

太黑_thj
2016/07/18
58
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
27
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部