文档章节

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

陶邦仁
 陶邦仁
发布于 2015/12/26 16:53
字数 372
阅读 821
收藏 11
点赞 0
评论 0

#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 总结问题# 问题解决!关键是解决问题的思路,由易到难,有外到内,确保最基本的配置不出问题。

© 著作权归作者所有

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

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

追梦的南瓜 ⋅ 2016/09/03 ⋅ 1

工作笔记_Index

程序开发坑 dom4j去除Xml命名空间 解释BOM头及去掉BOM头方法 Windows 32 64 位系统存放Dll 解决java.lang.OutOfMemoryError: unable to create new native thread JSP中文乱码问题解决 异常...

陶邦仁 ⋅ 2014/03/19 ⋅ 0

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 ⋅ 0

mybatis 实现批量更新

更新单条记录 1 UPDATE course SET name = 'course1' WHERE id = 'id1'; 更新多条记录的同一个字段为同一个值 1 UPDATE course SET name = 'course1' WHERE id in ('id1', 'id2', 'id3); 更新......

村东邹师傅 ⋅ 2015/04/23 ⋅ 0

mybatis 批量更新返回条数的问题

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

wangaowell ⋅ 2015/10/22 ⋅ 0

mybaits 动态SQL语句

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

李永china ⋅ 2016/05/11 ⋅ 0

mybatis 批量Update(1)

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

太黑_thj ⋅ 2016/07/18 ⋅ 0

mybatis批量操作问题总结

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

Elivense ⋅ 2016/11/30 ⋅ 0

mybatis 批量更新

此前的方案在做批量时使用mybatis提供的batch model,该模式下将推迟所有的update(包括insert和delete)语句直到提交事务或者遇到一次查询语句 上述代码可以看出当使用batch模式时如果sql和...

Mr_Qi ⋅ 2016/10/28 ⋅ 0

Mybatis批量插入对象怎么拿到对象id

Mybatis批量插入对象,数据库中对象id是自增长的。怎样在插入后使用对象ID,下面是我的写法: insert into tb_attribute( )values

hf201429 ⋅ 2016/05/06 ⋅ 6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 10分钟前 ⋅ 1

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部