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_VALUE
或2^31 - 1
,或2,147,483,647
。
题外话:
我读到 Integer 对象应该在 16 bytes
左右。
这 max limit
* 16
使您获得大约 34GB,因此使用经典的通用 public 服务器配置(通常为 32GB)您可能 运行 内存不足在达到最大限制之前出错。
请注意,它在 32 位 os 上是 impossible,ose 将达到 4GB 内存。
我想做类似的事情:
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_VALUE
或2^31 - 1
,或2,147,483,647
。
题外话:
我读到 Integer 对象应该在 16 bytes
左右。
这 max limit
* 16
使您获得大约 34GB,因此使用经典的通用 public 服务器配置(通常为 32GB)您可能 运行 内存不足在达到最大限制之前出错。
请注意,它在 32 位 os 上是 impossible,ose 将达到 4GB 内存。