import java.sql.*; public class CursorMD { public static void main(String args[]) throws Exception { Class.forName("org.postgresql.Driver"); Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/jurka","jurka",""); conn.setAutoCommit(false); Statement stmt = conn.createStatement(); stmt.execute("CREATE TEMP TABLE curtable (a int, b int)"); stmt.execute("INSERT INTO curtable VALUES (1,2)"); stmt.execute("CREATE OR REPLACE FUNCTION curfun() RETURNS refcursor AS 'DECLARE ref refcursor; BEGIN OPEN ref FOR SELECT a,b FROM curtable; RETURN ref; END; ' LANGUAGE plpgsql"); stmt.close(); CallableStatement cs = conn.prepareCall("{ ? = call curfun() }"); cs.registerOutParameter(1, Types.OTHER); cs.execute(); ResultSet rs = (ResultSet)cs.getObject(1); ResultSetMetaData rsmd = rs.getMetaData(); System.err.println(rsmd.getColumnCount()); System.err.println(rsmd.getColumnTypeName(1)); System.err.println(rsmd.getColumnTypeName(2)); rs.next(); System.err.println(rs.getInt(1)); rs.close(); cs.close(); conn.close(); } }