jdbc 连接的 `createArrayOf` 的最大元素数

max number of elements for a jdbc connection's `createArrayOf`

我想做类似的事情:

Integer[] largeIntArray = new Integer[]{ 1, 2, 3 }; // possibly 50k elements
List<Integer> result = jdbc.query(conn -> {
    PreparedStatement ps = conn.prepareStatement("SELECT number FROM something WHERE id = ANY(?)");
    ps.setArray(1, conn.createArrayOf("INTEGER", largeIntArray));
    return ps;
}, (rs, rowNum) -> rs.getInt(1));

使用 org.postgresql.jdbc.PgConnection#createArrayOf.

result没问题,我可以用游标。

largeIntArray可以包含多少个元素?

方法 org.postgresql.jdbc.PgConnection#createArrayOf return 数组的实现。

阵列实现容量的理论极限是Integer.MAX_VALUE2^31 - 1,或2,147,483,647

题外话:

我读到 Integer 对象应该在 16 bytes 左右。

max limit * 16 使您获得大约 34GB,因此使用经典的通用 public 服务器配置(通常为 32GB)您可能 运行 内存不足在达到最大限制之前出错。

请注意,它在 32 位 os 上是 impossible,ose 将达到 4GB 内存。