首页 > 数据库 >foreach批量插入数据库

foreach批量插入数据库

时间:2023-09-22 23:46:18浏览次数:37  
标签:insert checkitem 批量 数据库 MySQL checkgroup foreach SQL id

批量插入数据库

错误报告如下

Cause: java.sql.SQLSyntaxErrorException: 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 'insert into t_checkgroup_checkitem
        (checkitem_id,checkgroup_id)
' at line 5
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: 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 'insert into t_checkgroup_checkitem
(checkitem_id,checkgroup_id)
' at line 5
at com.heima.service.impl.CheckGroupServiceImplTest.addTest(CheckGroupServiceImplTest.java:26)
Caused by: java.sql.SQLSyntaxErrorException:
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 'insert into t_checkgroup_checkitem
(checkitem_id,checkgroup_id)
' at line 5
at com.heima.service.impl.CheckGroupServiceImplTest.addTest(CheckGroupServiceImplTest.java:26)

这个错误是由于在 <foreach>​ 标签中使用了 insert​ 语句,导致了 SQL 语法错误。在 MySQL 中,不能在一条 SQL 语句中执行多次 insert​ 操作。执行的错误SQL语句如下:

可以将 insert​ 语句移出 <foreach>​ 标签,然后在 <foreach>​ 标签中构造多个 values​ 子句,如下所示:

<insert id="add" parameterType="java.util.Map">
    insert into t_checkgroup_checkitem
    (checkgroup_id, checkitem_id)
    <foreach collection="checkitemIds" item="id" separator=",">
        values  (#{checkGroupId}, #{id})
    </foreach>
</insert>

然而,上面的代码还是不能正常工作,执行的错误SQL语句如下:

要把Value拿到的前面

而且因为 MySQL 不允许在一条 insert​ 语句中插入多组数据时,各组数据之间用逗号分隔。所以,需要修改 separator​ 属性的值,将其设置为 ","​如下所示:

<insert id="add" parameterType="java.util.Map">
    insert into t_checkgroup_checkitem
    (checkgroup_id, checkitem_id)
    values
    <foreach collection="checkitemIds" item="id" separator="),(">
        (#{checkGroupId}, #{id})
    </foreach>
</insert>

这样,生成的 SQL 语句应该类似于以下形式,这是符合 MySQL 语法的:

SQL复制insert into t_checkgroup_checkitem
(checkgroup_id, checkitem_id)
values 
(value1, value2),
(value3, value4),
...

标签:insert,checkitem,批量,数据库,MySQL,checkgroup,foreach,SQL,id
From: https://www.cnblogs.com/b1azeupup/p/17723687.html

相关文章

  • 数据库设计步骤
    首先我们需要建立一个ER模型 建立E-R模型的步骤1.定义实体集; 2.定义联系集 3.确定实体集与联系集的属性,4.标识出实体集与联系集的主码,形成完整的ER图 注意:实体在E-R图画成矩形联系在E-R图里画成菱形 两实体联系比值在连线上标识属性在E-R图里画成椭圆关......
  • 《动手学深度学习 Pytorch版》 7.5 批量规范化
    7.5.1训练深层网络训练神经网络的实际问题:数据预处理的方式会对最终结果产生巨大影响。训练时,多层感知机的中间层变量可能具有更广的变化范围。更深层的网络很复杂容易过拟合。批量规范化对小批量的大小有要求,只有批量大小足够大时批量规范化才是有效的。用\(\bol......
  • openGauss学习笔记-77 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT特性及
    openGauss学习笔记-77openGauss数据库管理-内存优化表MOT管理-内存表特性-MOT特性及价值本节介绍了openGauss内存优化表(Memory-OptimizedTable,MOT)的特性及价值。77MOT特性及价值MOT在高性能(查询和事务延迟)、高可扩展性(吞吐量和并发量)以及高资源利用率(某些程度上节约成本)方面......
  • C#连接MYSQL数据库基本步骤详解
    1、下载连接需要的connect-net包下载链接在这里:https://dev.mysql.com/downloads/connector/net/根据版本问题,我选择下载6.9的:下载完成之后,直接在我们新建好的窗体里面右键引用那里:选择添加引用:然后在选择下面浏览:按照C\ProgramFiles(X86)\MYSQL的路径下面,找到mySQL.d......
  • INNODB数据库恢复方法
    MYSQL数据库经常会出现重启数据库服务时卡住不动了,这时只能手动KILL进程,但很多情况下KILL后数据库服务就无法启动了,一般都是ibdata1这个文件损坏导致的,基本没有办法在原来的基础上恢复数据库。官方文档给出的解决办法是,新建一台数据库实例,版本要和原来的一样,前提是INNODB表必须是......
  • 【Java】JDBC 获取数据库表名、字段名、注释 Comment 等信息
    需求:给定数据库信息和表名,扫描表的字段名、字段类型和注释。要使用JavaJDBC获取数据库表名、字段名和注释信息,你需要连接到数据库并执行适当的SQL查询。以下是一些示例代码,展示如何获取这些信息。请注意,这些示例代码假定你已经建立了数据库连接。你需要根据你的数据库类型和连接......
  • 数据库考核2
    数据库考核文件要求:专业,班级,姓名。例如:计算111张三.md考核标准:格式及内容,请遵守markdown文件的语法。请填写正确的SQL语句,而不仅仅是结果。1统计出场率最高的三位英雄字段要求:英雄名称,出场次数SELECThero,COUNT(hero)frommatch_infoGROUPBYheroORDERBYCOUNT......
  • 使用JDBC插入数据时,数据库中文显示为?的解决方法
    问题描述:使用JDBC进行添加数据的操作,设置的参数为中文,运行成功后数据库显示插入的数据为??解决方法:配置url时加上?useUnicode=true&characterEncoding=UTF-8重新进行插入:结果显示正确。......
  • 生产订单的批量创建和组件的批量修改
    生产订单批量创建组件批量更改(先删除自带的,再添加上传的) *----------------------------------------------------------------------**模块:PP*描述:生产订单批导*时间:2023-07-10*----------------------------------------------------------------------*......
  • 【Python爬虫】批量爬取豆瓣电影排行Top250
    ​    今天给大家分享下我刚开始接触Python时学习的爬虫程序,代码部分很简单,不过当时刚开始学习时还是走了不少弯路的。这个爬虫程序应该是很多书里面的入门练手程序,主要就是去豆瓣爬取电影评分排行前250。        本篇文章只做学习交流使用,不涉及任何商业用途......