Обсуждение: Error when attempting to call Connection.createArrayOf() method

Поиск
Список
Период
Сортировка

Error when attempting to call Connection.createArrayOf() method

От
Allan Kamau
Дата:
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;
       }

Error when attempting to call Connection.createArrayOf() method

От
Allan Kamau
Дата:
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;
      }

Error when attempting to call Connection.createArrayOf() method

От
Allan Kamau
Дата:
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.

Re: Error when attempting to call Connection.createArrayOf() method

От
Guillaume Cottenceau
Дата:
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

Re: Error when attempting to call Connection.createArrayOf() method

От
Dave Cramer
Дата:
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

Re: Error when attempting to call Connection.createArrayOf() method

От
Kris Jurka
Дата:

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