PostgreSQL 和 JDBC 使用 setArray 设置整数数组抛出异常“无法将类型整数 [] 转换为整数”

Posted

技术标签:

【中文标题】PostgreSQL 和 JDBC 使用 setArray 设置整数数组抛出异常“无法将类型整数 [] 转换为整数”【英文标题】:PostgreSQL & JDBC set array of ints using `setArray` throw an exception "cannot cast type integer[] to integer" 【发布时间】:2018-04-29 07:39:34 【问题描述】:

如何在 JDBC 中设置整数数组(用 setArray 为 in 子句准备语句?

String query = "SELECT * FROM table WHERE id IN (?)";
// other things.
// ArrayList<Integer> some_ids;
preparedStatement.setArray(1, conn.createArrayOf("INTEGER", some_ids.toArray()));

它会编译,但执行会从 Postgres 中返回。

ERROR: cannot cast type integer[] to integer

【问题讨论】:

【参考方案1】:

在 PostgreSQL 中你必须使用= ANY(?) 而不是IN (?)

"SELECT * FROM table WHERE id = ANY(?)";

看看这个:9.21.3. ANY/SOME (array)

【讨论】:

以上是关于PostgreSQL 和 JDBC 使用 setArray 设置整数数组抛出异常“无法将类型整数 [] 转换为整数”的主要内容,如果未能解决你的问题,请参考以下文章

无论是不是使用 UTF8 编码,Postgresql/JDBC 都会失败

PostgreSQL 和 JDBC 使用 setArray 设置整数数组抛出异常“无法将类型整数 [] 转换为整数”

PostgreSQL JDBC 和 Android - NullPointerException

带有 PostgreSQL 和 Pentaho 的 JDBC 驱动程序

如何使用 jdbc/spring-jdbc 不使用 PGInterval 对 PostgreSQL 区间数据类型进行操作?

无法使用 Postgresql 将 JDBC 连接到 sonarqube