1

我写了stored procedure一个PostgreSQL。我尝试使用,这个程序在java中,它抛出' org.postgresql.util.PSQLException: ERROR: cursor " < unnamed portal 1 > " does not exist'异常。

程序:

CREATE OR REPLACE FUNCTION subject_show(session_id CHARACTER VARYING,OUT result_cursor refcursor, OUT total_record INTEGER, OUT total_search_record INTEGER  ) AS $$
        BEGIN
            total_record:=23;
            total_search_record:=22;
            OPEN result_cursor FOR SELECT "ID","NAME"   FROM "SUBJECTS" ;
    END;
    $$ LANGUAGE plpgsql;

调用过程,在java

...

callableStatement = conn.prepareCall("{ call subject_show(?,?,?,?) }");
callableStatement.setString(1, sessionID);
callableStatement.registerOutParameter(2, Types.REF);
callableStatement.registerOutParameter(3, Types.INTEGER);
callableStatement.registerOutParameter(4, Types.INTEGER);
callableStatement.executeUpdate();
System.out.println(callableStatement.getObject(3));
System.out.println(callableStatement.getObject(4));
rs = (ResultSet) callableStatement.getObject(2);
...
4

1 回答 1

1

我发现,只有关闭了自动提交,我才能做到这一点。游标仅在事务中有效,因此一旦驱动程序提交,游标就不再有效。因此我收到的错误。

于 2015-12-11T07:39:51.813 回答