当前位置: 首页 > 知识库问答 >
问题:

Spring NamedParameterJdbcTemplate删除with IN子句

卞俊贤
2023-03-14

当我尝试执行删除时,将项目设置为列表

public class DBTest {

    public static void main(String[] args) {
        BasicDataSource basicDataSource = new BasicDataSource();
        basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        basicDataSource.setUrl("jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true");
        basicDataSource.setUsername("root");
        basicDataSource.setPassword("qwedsa");

        NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(new JdbcTemplate(basicDataSource));

        ImmutableMap<String, ?> param = ImmutableMap.of("items", newArrayList("a", "b", "c"), "user_id", 1);
        Map<String, ?>[] params = new Map[]{param};
        template.batchUpdate("delete from sample where col1 in (:items) and user_id = :user_id", params);
    }
}

错误

bad SQL grammar [delete from sample where col1 in (?, ?, ?) and user_id = ?];
nested exception is java.sql.SQLException: No value specified for parameter 3

没有为delete语句展开列表吗?


共有1个答案

郏佐
2023-03-14

您可以将代码简化为:

public static void main(String[] args) {
        BasicDataSource basicDataSource = new BasicDataSource();
        basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        basicDataSource.setUrl("jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true");
        basicDataSource.setUsername("root");
        basicDataSource.setPassword("qwedsa");

        NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(basicDataSource);

        ImmutableMap<String, ?> param = ImmutableMap.of("items", newArrayList("a", "b", "c"), "user_id", 1);
        template.update("delete from sample where col1 in (:items) and user_id = :user_id", param);
    }

效果很好

 类似资料:
  • 删除子串 编写算法,从串s中删除所有和串t相同的子串。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据在第一行中输入不超过80个字符的字符串s,在第二行中输入不超过80个字符的字符串t,s和t中允许包含空格。 输出格式: 对于每组测试,输出在串s中删除所有和串t相同的子串后的结果串。 输入样例: AABBBBCCDDEEBB BB 输出样例: AACCDDEE 代码长度限制 16 KB 时

  • 编辑:修改问题以更好地反映问题。此处最初发布的问题 我有一个父实体(< code >上下文)和一个子实体(< code >用户)。父级上的级联“删除”不会删除子级。代码如下:

  • 创建帖子时,我的用户会提供一个外部链接。如果删除了外部链接,本地帖子也应该删除。为了实现这一点,我尝试运行以下代码... ...但是我得到了这些错误... 警告:get_headers(): php_network_getaddresses: getaddrinfo failed: name or service in /home/cornwal2/public_html/listings/wp-

  • within-terraform Test repo, please ignore

  • 问题内容: 我试图使用没有结果的过滤查询删除一些子行: 我得到了错误。 全栈跟踪: 我无法找到问题所在。 任何想法? 问候 问题答案: 在查找您的异常发生的源之后,我建议尝试以下操作: 请参阅delete方法的文档以了解其含义。传递参数将基本上运行查询两次,一次为选择,一次为删除。 如果运行两个查询是不希望的,通过代替,然后调用立即删除后,以避免不一致的状态的内部存储。

  • 仅企业版可用 请求header DELETE /v1/account/deleteActManager Authorization:Bearer {ACCESS TOKEN} 注: 请将上方的{ACCESS TOKEN}替换为您的ACCESS TOKEN 请求payload { "manager_id" : 233, "is_delete_act" : 1 } payload参