【发布时间】:2014-12-18 23:18:47
【问题描述】:
我正在尝试使用 Java 的 postgresql jdbc4 将一系列值插入到 sql 查询中。
java.sql.Connection 指定将Object[] 转换为java.sql.Array 的方法:conn.createArrayOf(String typeName, Object[] elements)
唯一的问题是,无论我尝试什么,它总是返回 null。
public Array makeQueryBigintArray(Object[] values) throws SQLException {
Array result = conn.createArrayOf("bigint", values);
// "result" is null at this point, but shouldn't be
return result;
}
conn 是通过 dataSource.getConnection() 工作的 javax.sql.DataSource 检索的。 conn 适用于我们所有其他数据库用途,但其 createArrayOf() 方法始终返回 null。
按照this question,我已经尝试过 typeName 的大写“BIGINT”和小写“bigint”,但均无济于事。
当我深入调试器时,我发现 conn 是一个 org.apache.commons.dbcp.PoolableConnection 包装了一个 org.postgresql.jdbc4.Jdbc4Connection。
如果 postgres/JDBC4 不支持该功能,我希望调用它会引发 SQLException,表明它不受支持。不抛出异常。
关于为什么它返回 null 的任何线索?
我该如何修复它,否则,我如何将数组或值列表传递给PreparedStatement?
【问题讨论】:
-
您使用的是 PostgreSQL 最新的 JDBC 4(!) 驱动程序吗?看起来已经实现了:github.com/pgjdbc/pgjdbc/blob/master/org/postgresql/jdbc4/…(现在已经有几年了)
-
你能用
"int8"试试吗?"bigint"只是"int8"的别名(但两者都应在此上下文中使用)。 -
@MarkRotteveel 我们使用的构建仅比最新的 PostgreSQL JDBC 落后 2 个构建。也就是说,我们使用的是 build 1002,而 build 1004 是截至 2014 年 12 月 19 日的最新版本。我也有类似的想法,也许它是一个非常古老的东西,但它是最近的。
-
好的,但是您使用的是 jdbc 4 版本吗? Afaik,jdbc 3 构建没有它。
-
@MarkRotteveel 是的,JDBC 4 标准,内部版本 1002。
标签: java postgresql jdbc database-connection