当前位置: 首页 > 知识库问答 >
问题:

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

危砚
2023-03-14

我有一个在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个答案

杜经艺
2023-03-14

我认为问题是您用于连接Postgres的Driver不支持所有DBCP方法(AbstractmetodError)。请记住,DBCP使用标准的最新规范,但您可能使用的驱动程序不支持它。

我要做的是将postgres驱动程序jar升级到最新版本,看看它是否符合DBCP规范。

李法
2023-03-14

这两件事看起来很有希望:在postgres这边答,那边答。

可能驱动程序不支持,你可以尝试打开Postgresql连接,然后直接使用它,就像这样(不能100%确定类名,你必须在驱动程序的jar里面找到它)...

PGSQLConnection pgsqlConnection = null;
try {
    if (connection.isWrapperFor(PGSQLConnection .class)) {
        pgsqlConnection = connection.unwrap(PGSQLConnection .class);
    }
} catch (SQLException ex) {
    // do something
}

返回oracleConnection;

 类似资料:

相关问答

相关文章

相关阅读