Обсуждение: NullPointerException in ResultSetMetaData getColumnCount when using on a resultset from a stored function

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

NullPointerException in ResultSetMetaData getColumnCount when using on a resultset from a stored function

От
tomas.johansson@agent25.se (Tomas)
Дата:
How can you get metadata from a resultset that is returned from a
stored function ?

I have tried the code below with the latest "pg74.215.jdbc3.jar" at
http://jdbc.postgresql.org/download.html
but the invocation of metaData.getColumnCount()) below will lead to a
NullPointerException:
java.lang.NullPointerException
    at org.postgresql.jdbc2.AbstractJdbc2ResultSetMetaData.getColumnCount(AbstractJdbc2ResultSetMetaData.java:34)

private void testCallable(Connection conn) throws Exception
    {
        CallableStatement call = conn.prepareCall("{ ? = call
myfunction() }");
        call.registerOutParameter(1, Types.OTHER);
        call.execute();
        ResultSet results = (ResultSet) call.getObject(1);

        ResultSetMetaData metaData =  results.getMetaData();
        System.out.println("getColumnCount: " +
metaData.getColumnCount());

        results.close();
        call.close();
    }




CREATE TABLE public.mytable
(
  mycolumn int4,
  mycolumn2 int4
)


CREATE OR REPLACE FUNCTION public.myfunction()
  RETURNS refcursor AS
'
DECLARE
        ref refcursor;
BEGIN
        OPEN ref FOR
    SELECT mycolumn, mycolumn2 FROM mytable;
        RETURN ref;
END;
'
  LANGUAGE 'plpgsql'

Re: NullPointerException in ResultSetMetaData getColumnCount

От
Kris Jurka
Дата:

On Mon, 18 Oct 2004, Tomas wrote:

> How can you get metadata from a resultset that is returned from a
> stored function ?

You need to be running with autocommit off for this to work at all.  This
is not just a metadata problem.  The problem is that cursors are closed at
commit, which in auto commit mode is before the results can even be
fetched from it.  It could definitely use a better error message, the 8.0
driver gives "ERROR: cursor "<unnamed portal 1>" does not exist", but
that's still not very good.

Kris Jurka

Re: NullPointerException in ResultSetMetaData getColumnCount

От
tomas.johansson@agent25.se (Tomas)
Дата:
books@ejurka.com (Kris Jurka) wrote in message news:<Pine.BSO.4.56.0410181515590.5115@leary.csoft.net>...
> On Mon, 18 Oct 2004, Tomas wrote:
>
> > How can you get metadata from a resultset that is returned from a
> > stored function ?
>
> You need to be running with autocommit off for this to work at all.  This
> is not just a metadata problem.  The problem is that cursors are closed at
> commit, which in auto commit mode is before the results can even be
> fetched from it.  It could definitely use a better error message, the 8.0
> driver gives "ERROR: cursor "<unnamed portal 1>" does not exist", but
> that's still not very good.
>
> Kris Jurka

Thank you Kris for your answer.
I was using the 7.4 version of the driver since the PostgreSQL version
I am using is 7.4.5 but now I tested the 8.0 driver and then the
metadata seems to work. Regarding the 7.4 driver it did not help to
change the autocommit.
/ Tomas