Обсуждение: 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'
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