java.lang.AbstractMethodError:org.apache.commons.dbcp.PoolingDataSource

时间:2015-07-24 05:41:20

标签: java arrays apache postgresql jdbc

我在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
    );

2 个答案:

答案 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规范。