java.sql.Connection createArrayOf()始终返回null

时间:2014-12-18 23:18:47

标签: java postgresql jdbc database-connection

我正在尝试使用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通过javax.sql.DataSource检索

dataSource.getConnection()conn适用于我们所有其他数据库用途,但其createArrayOf()方法始终返回null。

我尝试过大写" BIGINT"小写" bigint"对于typeName,根据this question,无济于事。

当我浏览调试器时,我发现connorg.apache.commons.dbcp.PoolableConnection包裹org.postgresql.jdbc4.Jdbc4Connection

如果postgres / JDBC4不支持该功能,我希望调用它来抛出一个SQLException,表明它不受支持。没有例外。

关于为什么它返回null的任何线索?

如何修复它,否则,我如何将数组或值列表传递给PreparedStatement

1 个答案:

答案 0 :(得分:0)

如果您使用某些Linux打包系统安装了Tomcat6,那么您的/usr/share/tomcat6/lib目录中可能有旧版本的commons-jdbc和commons-dbcp。这些旧的commons-jdbc和commons-dbcp库在创建SQL数组时显然有一些bug。

由于代码复杂性和各种明显的缺点,Apache团队决定停止维护commons-dbcp并转移到tomcat-dbcp。

我做的是我去了Maven Central,下载了最新的tomcat-jdbctomcat-dbcp并将它们放入/usr/share/tomcat6/lib并将commons-jdbc和commons-dbcp JAR移动到{{1} }。我还必须添加位于/tmp后面的

的上下文文件
/etc/tomcat6/Catalina/localhost/my_app.xml

我认为发生的事情是在一些JDBCConnection包装器中处理异常时存在一个错误,在commons-dbcp中有很多包装。我怀疑有部分代码是the culprit,但我不确定原因和方法。总而言之,一旦我从commons-dbcp迁移,事情就开始重新开始了。