在 PostgreSQL 中使用 Java 中的 createArrayOf 时结果集为空
ResultSet empty when using createArrayOf in Java with PostgreSQL
我正在尝试使用 id
的数组查询 product table。这是该方法的一个片段:
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;
Table product
包含 3 行 id
s 1、2 和 3。products
returns 为空。知道为什么吗?
谢谢
编辑
The right-hand side is a parenthesized list of scalar expressions
示例(1,2,3)
所以,我认为问题变成了:如何从我的 ArrayList
中获取标量表达式列表?
要在查询的 WHERE 子句中检查元素是否在数组中,您可以使用 ANY。你的情况:
SELECT * FROM product WHERE id = ANY(?)
我正在尝试使用 id
的数组查询 product table。这是该方法的一个片段:
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;
Table product
包含 3 行 id
s 1、2 和 3。products
returns 为空。知道为什么吗?
谢谢
编辑
The right-hand side is a parenthesized list of scalar expressions
示例(1,2,3)
所以,我认为问题变成了:如何从我的 ArrayList
中获取标量表达式列表?
要在查询的 WHERE 子句中检查元素是否在数组中,您可以使用 ANY。你的情况:
SELECT * FROM product WHERE id = ANY(?)