在Java中与PostgreSQL一起使用createArrayOf时,ResultSet为空



我正试图使用ids数组查询产品表。下面是该方法的一个片段:

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行,其中id为1、2和3。products返回null。知道为什么吗?

感谢

编辑

根据第9.23.1节

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

示例(1,2,3)

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

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

SELECT * FROM product WHERE id = ANY(?)

最新更新