Обсуждение: Error when attempting to call Connection.createArrayOf() method
I am trying create an array of text to pass to a postgreSQL function and I am getting the following error "java.lang.AbstractMethodError: org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;" I have tried googling for a possible solution without much success the closed I got was the discussion in this thread "http://archives.postgresql.org/pgsql-jdbc/2009-04/msg00013.php" but I am unable to find the successful conclusion/solution for this error. I am using JDBC driver (postgresql-8.4-701.jdbc4.jar) for postgreSQL and commons-dbcp-1.2.2.jar for connection pooling. My code like like this. public static int persistUserInput( Connection conn,String _user_input_id,Map<String,Vector<String>> userInputMap )throws SQLException { int _rows_affected=-1; String _input_name=null; String _input_values[]=new String[0]; PreparedStatement ps=null;ResultSet rs=null; for (Map.Entry<String,Vector<String>> y : userInputMap.entrySet()) { _input_name=y.getKey(); Vector<String> v=y.getValue(); _input_values=v.toArray(_input_values); try { String _sql_query="" +" SELECT persist_user_input(?,?,?);" ; ps=conn.prepareStatement(_sql_query); ps.setString(1,_user_input_id); ps.setString(2,_input_name); ps.setArray(3,conn.createArrayOf("text",_input_values)); rs=ps.executeQuery(); if(rs.next()) { _rows_affected=rs.getInt(1); } rs.close(); ps.close(); } catch(SQLException e) { throw e; } finally { /* rs.close(); ps.close(); if(rs!=null&&!rs.isClosed()) { rs.close(); } rs=null; if(ps!=null&&!ps.isClosed()) { ps.close(); } ps=null; */ } } return _rows_affected; }
Hi,
I am trying create an array of text to pass to a postgreSQL function
and I am getting the following error
"java.lang.AbstractMethodError:
org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;"
I have tried googling for a possible solution without much success the
closed I got was the discussion in this mailing list but I
am unable to find the successful conclusion/solution for this error.
I am using JDBC driver (postgresql-8.4-701.jdbc4.jar) for postgreSQL
and commons-dbcp-1.2.2.jar for connection pooling.
My code like like this.
public static int persistUserInput(
Connection conn,String
_user_input_id,Map<String,Vector<String>> userInputMap
)throws SQLException
{
int _rows_affected=-1;
String _input_name=null;
String _input_values[]=new String[0];
PreparedStatement ps=null;ResultSet rs=null;
for (Map.Entry<String,Vector<String>> y :
userInputMap.entrySet())
{
_input_name=y.getKey();
Vector<String> v=y.getValue();
_input_values=v.toArray(_input_values);
try
{
String _sql_query=""
+" SELECT persist_user_input(?,?,?);"
;
ps=conn.prepareStatement(_sql_query);
ps.setString(1,_user_input_id);
ps.setString(2,_input_name);
ps.setArray(3,conn.createArrayOf("text",_input_values));
rs=ps.executeQuery();
if(rs.next())
{
_rows_affected=rs.getInt(1);
}
rs.close();
ps.close();
}
catch(SQLException e)
{
throw e;
}
finally
{
/*
rs.close();
ps.close();
if(rs!=null&&!rs.isClosed())
{
rs.close();
}
rs=null;
if(ps!=null&&!ps.isClosed())
{
ps.close();
}
ps=null;
*/
}
}
return _rows_affected;
}
I am trying create an array of text to pass to a postgreSQL function
and I am getting the following error
"java.lang.AbstractMethodError:
org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;"
I am using JDBC driver (postgresql-8.4-701.jdbc4.jar) for postgreSQL
and commons-dbcp-1.2.2.jar for connection pooling.
My code like like this.
String[] _input_values={"one","two"};
conn.createArrayOf("text",_input_values)
Allan.
Allan Kamau <kamauallan 'at' gmail.com> writes: > I am trying create an array of text to pass to a postgreSQL function I personally use the following workaround to send arrays to PG, it might be helpful for you too: http://zarb.org/~gc/html/doc-misc.html#2008-08-21 BR -- Guillaume Cottenceau
On Wed, Dec 16, 2009 at 8:38 AM, Allan Kamau <kamauallan@gmail.com> wrote:
> I am trying create an array of text to pass to a postgreSQL function
> and I am getting the following error
> "java.lang.AbstractMethodError:
>
org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;"
>
>
> I am using JDBC driver (postgresql-8.4-701.jdbc4.jar) for postgreSQL
> and commons-dbcp-1.2.2.jar for connection pooling.
>
> My code like like this.
>
> String[] _input_values={"one","two"};
> conn.createArrayOf("text",_input_values)
>
>
AFAIR, Kris implemented this,does this work if you do not use dbpc ?
Dave
On Wed, 16 Dec 2009, Allan Kamau wrote: > I am trying create an array of text to pass to a postgreSQL function > and I am getting the following error > "java.lang.AbstractMethodError: > org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;" This error is the result of using a JDBC4 method (createArrayOf) on a non-JDBC4 Connection. Apparently DBCP doesn't support JDBC4. See, for example, this message: http://www.mail-archive.com/user@commons.apache.org/msg03376.html The reply's suggestion of unwrapping the DBCP connection to get the postgresql connection object is likely to work. Kris Jurka