Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSql 12 JDBC多结果集,只能获取第一个结果集_Postgresql_Jdbc_Multiple Resultsets - Fatal编程技术网

PostgreSql 12 JDBC多结果集,只能获取第一个结果集

PostgreSql 12 JDBC多结果集,只能获取第一个结果集,postgresql,jdbc,multiple-resultsets,Postgresql,Jdbc,Multiple Resultsets,希望JDBC从PostgreSql 12函数中获取多个结果集。JDBC版本org.postgresql/postgresql/42.2.9。PostgreSql函数如下所示: create or replace function test() returns setof refcursor as $$ declare ret1 refcursor; ret2 refcursor; begin open ret1 for select 10 as a; re

希望JDBC从PostgreSql 12函数中获取多个结果集。JDBC版本org.postgresql/postgresql/42.2.9。PostgreSql函数如下所示:

create or replace function test()
returns setof refcursor as $$
declare
    ret1 refcursor;
    ret2 refcursor;
begin
    open ret1 for
    select 10 as a;
    return next ret1;
    open ret2 for
    select 20 as b;
    return next ret2;
end; $$ language plpgsql;
Java代码如下所示:

stmt = getConnection().prepareCall("{ ? = call test() }");
stmt.registerOutParameter(1, Types.OTHER);
stmt.execute();
rs = (ResultSet)stmt.getObject(1);
if (rs.next()) {
    int a = rs.getInt("a");
    if (rs.next()) {
        int b = rs.getInt("b");
    }
}
已成功检索“a”,但第二个“rs.next()”返回false。谷歌搜索了很多,但都没能成功。如何获得第二个结果集?

这对我帮助很大,问题得到了解决

    ...
    out ret1 refcursor,
    out ret2 refcursor)
returns record as $$
begin
    open ret1 for select 10;
    open ret2 for select 20;
end; $$ language plpgsql;
爪哇:

stmt = getConnection().prepareCall("{call test(?,?)}");
stmt.registerOutParameter(1, Types.OTHER);
stmt.registerOutParameter(2, Types.OTHER);
stmt.execute();
ResultSet rs1 = (ResultSet)stmt.getObject(1);
ResultSet rs2 = (ResultSet)stmt.getObject(2);
int a = 0, b = 0;
if (rs1.next()) {
    a = rs1.getInt(1);
}
if (rs2.next()) {
    b = rs2.getInt(1);
}