如何使用 jdbc 准备好的语句传递可变数量的参数?

Posted

技术标签:

【中文标题】如何使用 jdbc 准备好的语句传递可变数量的参数?【英文标题】:how to pass a variable number of parameters using a jdbc prepared statement? 【发布时间】:2017-10-06 05:53:52 【问题描述】:

在 db2 上使用以下语句来执行 UPSERT 操作:

MERGE INTO mytable AS mt USING (
    SELECT * FROM TABLE (
        VALUES 
            (?, ?),
            (?, ?),
            —- ^ repeated many times, one for each row to be upserted
    )
) AS vt(id, val) ON (mt.id = vt.id)
WHEN MATCHED THEN
    UPDATE SET val = vt.val
WHEN NOT MATCHED THEN
    INSERT (id, val) VALUES (vt.id, vt.val)
;

每次调用此语句时,我都会插入不同数量的行。是否可以使用准备好的语句进行此调用?那会是什么样子?

参考:https://***.com/a/23784606/1033422

【问题讨论】:

如果有多少?参数标记每次运行都会变化,如果参数标记的数量发生变化,您必须重新准备。我会使用 DGTT,尤其是在有大量行的情况下。是的,更多语句,但更容易扩展,因为可以动态索引 dgtt。 谢谢@mao。如果您想将此转换为答案,我很乐意接受。 【参考方案1】:

如果? 参数标记的数量每次运行都不同,那么如果参数标记的数量发生变化,您必须重新准备。我会使用声明的全局临时表 (DGTT),尤其是在行数非常多的情况下。是的,更多语句,但更易于扩展,因为您可以动态索引 DGTT。

有关 DB2 中临时表的更多信息,请参阅this question。

【讨论】:

以上是关于如何使用 jdbc 准备好的语句传递可变数量的参数?的主要内容,如果未能解决你的问题,请参考以下文章

JDBC驱动程序为准备好的语句转义参数?

如何使用准备好的语句动态绑定参数?

通过 jdbc 通过准备好的语句传递 SQL 命令时出错

在 JDBC 中,为啥准备好的语句的参数索引从 1 而不是 0 开始?

使用 neo4j jdbc 驱动程序和 neo4j 4 准备好的语句中的密码查询参数的语法是啥?

是否可以在 JDBC 中执行“字段 IN 列表”查询,并将列表作为参数传递?