【问题标题】:pass array to postgres in JDBC将数组传递给 JDBC 中的 postgres
【发布时间】:2019-06-10 11:01:43
【问题描述】:

我想使用 JDBC 在 Postgres 中执行以下查询:

with things as (values(1),(2)) select * from things;

所以我的 Java 代码如下所示:

String sql = "with things as (?) select * from things";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setArray(1, conn.createArrayOf("INTEGER", new Integer[]{1, 2});

但这会引发以下错误:

org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1"

【问题讨论】:

  • 我不认为你可以在 Java 中使用准备好的语句来做到这一点。但是,更大的问题是您为什么要这样做? SQL 是一种主要用于从已经存在的表中提取数据的语言,而不是真正用于填充它们然后从中进行选择。

标签: postgresql jdbc common-table-expression


【解决方案1】:

您可以像这样使用unnest 做您需要的事情:

Integer[] id = {1, 2};
Array array = connection.createArrayOf("int4", id);

try (PreparedStatement stmt = connection.prepareStatement(
         "with things as (select unnest((?)::integer[])) select * from things")) {
    stmt.setArray(1, array);
    ResultSet rs = stmt.executeQuery();
    // use the result set
}

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2012-05-20
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2012-10-30
    • 2012-08-16
    • 2019-02-26
    相关资源
    最近更新 更多