![](/img/trans.png)
[英]java.sql.Connection createArrayOf() returns Unsupported feature
[英]java.sql.Connection createArrayOf() always returns null
我正在尝试使用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;
}
通过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-jdbc和tomcat-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.