我在postgres中有一个包含数组数据类型的表。我正在使用我的java类中的JDBC插入值。但是,无法插入并获得以下错误..
[Handler processing failed; nested exception is java.lang.AbstractMethodError: org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;] with root cause
java.lang.AbstractMethodError: org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.hibernate.jdbc.BorrowedConnectionProxy.invoke(BorrowedConnectionProxy.java:74)
at com.sun.proxy.$Proxy41.createArrayOf(Unknown Source)
at com.mmf.controllers.UpdateReconcileController.save(com.mmf.controllers.UpdateReconcileController:146)
我的代码是
String querys = "insert into reconcile_process (process_type,fk_last_modified_by,fk_bank_stmt_id)"
+ " values (?,?,?)";
Connection connections = sessionFactory.getCurrentSession().connection();
CallableStatement stmts = connections.prepareCall(querys);
stmts.setString(1, "Auto");
stmts.setInt(2, 1);
stmts.setArray(3, connections.createArrayOf("integer", idArrs)); -----// line 146
stmts.executeUpdate(querys);;
connections.close();
postgres表
CREATE TABLE reconcile_process
(
id bigserial NOT NULL,
fk_last_modified_by bigint NOT NULL,
process_type character varying,
fk_bank_stmt_id bigint[]
)
WITH (
OIDS=FALSE
);
答案 0 :(得分:0)
这两件事看起来很有希望:在here回答postgres和答案。
可能驱动程序不支持,您可以尝试打开Postgresql连接,然后直接使用它(就像那样(不是100%确定类名,你必须查看驱动程序内部&#39) ; s jar找到那个)...
PGSQLConnection pgsqlConnection = null;
try {
if (connection.isWrapperFor(PGSQLConnection .class)) {
pgsqlConnection = connection.unwrap(PGSQLConnection .class);
}
} catch (SQLException ex) {
// do something
}
返回oracleConnection;
答案 1 :(得分:0)
我认为问题在于您用来连接Postgres的驱动程序不支持所有DBCP方法(AbstractMethodError)。请记住,DBCP使用标准的最新规范,但您可能正在使用不支持它的驱动程序。
我要做的是将postgres驱动程序jar升级到tha latest version,看它是否符合DBCP规范。