繁体   English   中英

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

[英]java.sql.Connection createArrayOf() always returns null

我正在尝试使用Java的postgresql jdbc4在SQL查询中插入一系列值。

java.sql.Connection指定一种将Object[]转换为java.sql.Arrayconn.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;
}

通过dataSource.getConnection()通过有效的javax.sql.DataSource检索conn conn可用于我们所有其他数据库用途,但其createArrayOf()方法始终返回null。

根据这个问题 ,我已经尝试对typeName使用大写字母“ BIGINT”和小写字母“ bigint”,但均无济于事。

当我深入调试器时,我发现conn是一个org.apache.commons.dbcp.PoolableConnection包装了org.postgresql.jdbc4.Jdbc4Connection

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

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

如何解决该问题,否则如何将数组或值列表传递给PreparedStatement

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

由于代码复杂性和各种可察觉的缺点,Apache团队决定停止维护commons-dbcp并转而使用tomcat-dbcp。

我要做的是去Maven Central,下载了最新的tomcat-jdbctomcat-dbcp并将其放入/usr/share/tomcat6/lib并将commons-jdbc和commons-dbcp JAR移至/tmp 我还必须将以下内容添加到位于/etc/tomcat6/Catalina/localhost/my_app.xml上下文文件中

factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

我认为正在发生的事情是在某些JDBCConnection包装器中处理异常时存在一个错误,在commons-dbcp中有很多错误。 我怀疑其中有一部分代码是罪魁祸首,但我不确定原因和方式。 总而言之,当我从commons-dbcp移出后,一切又开始恢复正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM