【问题标题】:ResultSet empty when using createArrayOf in Java with PostgreSQL在 Java 和 PostgreSQL 中使用 createArrayOf 时,ResultSet 为空
【发布时间】:2020-12-26 08:24:50
【问题描述】:

我正在尝试使用 ids 的数组查询 product 表。这是该方法的一个片段:

PreparedStatement statement = connection
    .prepareStatement("SELECT * FROM product WHERE id IN (?)");

System.out.println(ids /*ArrayList<Integer>*/); //prints [3]

Array array = connection.createArrayOf("INTEGER", ids.toArray());
// Array array = connection.createArrayOf("INTEGER", new Integer[]{1, 2, 3}); //<-----tried this too

statement.setArray(1, array);

ResultSet results = statement.executeQuery();

while (results.next()) {
    System.out.println("does not print this");
    Product product = new Product(0);
    product.setId(results.getInt("id"));
    products.add(product);
}

return products;

product 包含 3 行 ids 1、2 和 3。products 返回 null。知道为什么吗?

谢谢

编辑

根据section 9.23.1

右侧是标量表达式的括号列表

示例(1,2,3)

所以,我认为问题变成了:如何从我的ArrayList 获取标量表达式列表?

【问题讨论】:

  • 这不是您填充 SQL 集的方式。您必须提供适当数量的? 标记并手动为其设置值。 SQL 数组是完全不同的野兽。
  • 好的,所以我这样做。现在,我可能怎么做呢?任何例子,sn-ps,资源,指针,信号?谢谢
  • 您是否尝试过:'SELECT * FROM product WHERE id = ANY(?)' 并且您的查询是否有效,使用 psql 客户端?
  • @SimonSchiff 回答这个问题,得到你的分数

标签: java arrays postgresql prepared-statement sqlconnection


【解决方案1】:

要在查询的 WHERE 子句中检查元素是否在数组中,您可以使用 ANY。在你的情况下:

SELECT * FROM product WHERE id = ANY(?)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-27
    • 2011-01-20
    • 2013-03-22
    • 2014-08-15
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多