gpt4 book ai didi

java.sql.Connection createArrayOf() 总是返回 null

转载 作者:行者123 更新时间:2023-11-29 12:27:11 36 4
gpt4 key购买 nike

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

java.sql.Connection 指定将Object[]转换为java.sql.Array的方法:conn.createArrayOf (String typeName, Object[] 元素)

唯一的问题是,无论我尝试什么,它总是返回 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,我已经尝试对类型名称使用大写“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 中有很多。我怀疑部分代码是 the culprit但我不确定为什么以及如何。总而言之,一旦我从 commons-dbcp 移出,一切就又开始工作了。

关于java.sql.Connection createArrayOf() 总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27557411/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com