【问题标题】:How to convert the prepare statement sql string with an Object to the exact sql string?如何将带有对象的prepare语句sql字符串转换为确切的sql字符串?
【发布时间】:2020-10-30 00:23:09
【问题描述】:

我正在使用弹簧。我有很多更新步骤,有没有办法为此使用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);

因为batchUpdate 的参数是Array[]。如何将带有 Object 的 prepare 语句 SQL 字符串转换为精确的 SQL 字符串?

【问题讨论】:

    标签: java jdbc spring-jdbc jdbctemplate


    【解决方案1】:

    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}
        )
    ); 
    

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

    See also this example.

    【讨论】:

    • 是的,我有一堆不同的 SQL 语句。 SQL 包含符号“?”。是否有将 SQL 语句和变量对象转换为纯 SQL 字符串的实用程序?
    • 对不起,我错过了你的 SQL 语句不一样
    • 我不认为这有什么用处。只要具有其值的语句本身不包含?,String.replace 可能就足够了。
    • 是的,最后我使用了 String.replace。对于变量String,我添加了'quote'标记来环绕,其他的将只是替换。
    • 但我最近了解到,没有prepare statement,这对数据库性能不利。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2019-11-26
    • 2013-09-22
    相关资源
    最近更新 更多