首页 > 解决方案 > 如何将带有对象的prepare语句sql字符串转换为确切的sql字符串?

问题描述

我正在使用弹簧。我有很多更新步骤,有没有办法使用batchUpdate这个?

原来的

jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});  
jdbcTemplate.update("UPDATE USER2 SET name = ? WHERE user_id = ?", new Object[] {name, id2});  
jdbcTemplate.update("UPDATE USER3 SET name = ? WHERE user_id = ?", new Object[] {name, id3});  

如何使用批处理更新

getJdbcTemplate().batchUpdate(sql);

因为 for 的参数batchUpdateArray[]。如何将带有对象的准备语句 SQL 字符串转换为确切的 SQL 字符串?

标签: javajdbcspring-jdbcjdbctemplate

解决方案


int\[\] batchUpdate(String... sql)是错误的工作方法。它适用于您有一堆不带参数的不同 SQL 语句的情况,您希望一次性执行这些语句。

您需要使用其他batchUpdate方法之一。

如果您不需要控制批量大小 public int[] batchUpdate(String sql, List<Object[]> batchArgs) 应该可以正常工作。调用将如下所示:

jdbcTemplate.update(
    "UPDATE USER SET name = ? WHERE user_id = ?", 
    Arrays.asList(
        new Object[] {name, id},
        new Object[] {name, id2}, 
        new Object[] {name, id3}
    )
); 

还可以查看允许提供批量大小、参数类型或参数设置器的其他变体,它们允许单独为批量的每个部分设置参数。

另请参阅此示例


推荐阅读