Can';Java中的t调用存储过程
我在Can';Java中的t调用存储过程,java,postgresql,stored-procedures,ref-cursor,Java,Postgresql,Stored Procedures,Ref Cursor,我在PostgreSQL中编写了一个存储过程。我尝试使用java中的这个过程,它抛出'org.postgresql.util.PSQLException:ERROR:cursor“”不存在”异常 程序: CREATE OR REPLACE FUNCTION subject_show(session_id CHARACTER VARYING,OUT result_cursor refcursor, OUT total_record INTEGER, OUT total_search_record
PostgreSQL
中编写了一个存储过程。我尝试使用java中的这个过程,它抛出'org.postgresql.util.PSQLException:ERROR:cursor“”不存在
”异常
程序:
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);
...
我发现,,
我只能在您关闭自动提交的情况下执行此操作。光标是
仅在事务内有效,因此只要驱动程序提交
光标不再有效。因此,我收到的错误