JdbcTemplate 批量向多条语句发送参数

Posted

技术标签:

【中文标题】JdbcTemplate 批量向多条语句发送参数【英文标题】:JdbcTemplate send parameters to multiple statements in one batch 【发布时间】:2017-09-29 15:55:30 【问题描述】:

我有如下声明:

String query = "DELETE FROM myTable WHERE id=? AND otherField=?; DELETE FROM myOtherTable WHERE idOther=? AND anotherField=?;";

将作为一个查询(一个接一个)执行。所以,我有如下内容:

JdbcTemplate template;
template.update(query, new Object[] 1, "otherValue", 3, "anotherValue" );

失败并出现以下错误:

org.postgresql.util.PSQLException:列索引超出范围: 3、列数:2。

我认为这里的问题是,查询由分号分隔,并且将为每个查询应用参数,并且无论分号如何,它都会尝试应用参数。所以,我有 4 个参数,但第一个查询只收到 2 个(虽然两个查询的总和是 4)。

有没有办法让我将参数传递给查询? 我不能使用命名模板

【问题讨论】:

投反对票的人能解释一下为什么投反对票吗? 为什么两个 DELETE 语句必须在同一个 Java 字符串中? 你不能一次执行多个语句。 【参考方案1】:

我最终自己进行了替换,然后执行了查询。

【讨论】:

以上是关于JdbcTemplate 批量向多条语句发送参数的主要内容,如果未能解决你的问题,请参考以下文章

Spring5学习笔记(13) — “JdbcTemplate 操作数据库(批量增删改)”

使用 jdbcTemplate.batchUpdate 混淆批量插入

mybatis批量更新不同参数多条语句带分号update报错的解决方案

如何向山魈发送多条消息

spring JdbcTemplate批量插入以及单个插入时获取id

Spring基础(十三):JDBCTemplate的批操作