2015-07-24 3 views
0

У меня есть таблица с типом массива в postgres. Я вставляю значения, используя JDBC из моего класса java. Но, не удается вставить в том, что и получаю следующее сообщение об ошибке ..java.lang.AbstractMethodError: org.apache.commons.dbcp.PoolingDataSource

[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

Эти две вещи выглядят многообещающими: Ответ here и ответ там в postgres.

Возможно, драйвер не поддерживает это, вы можете попытаться развернуть соединение Postgresql, а затем использовать его прямо, как это (не на 100% уверены в имени класса, вам придется заглянуть внутрь флага водителя, чтобы найти что один) ...

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

return oracleConnection;

0

Я думаю, что проблема в том, что драйвер, который вы используете для подключения к Postgres, не поддерживает все методы DBCP (AbstractMethodError). Помните, что DBCP использует новейшие спецификации для стандартного, но вы можете использовать драйвер, который его не поддерживает.

Что бы я сделал, это обновить баннер драйвера postgres до tha latest version и посмотреть, соответствует ли он спецификациям DBCP.

Смежные вопросы