【问题标题】:PostgreSql 12 JDBC multiple resultset, can only get the first resultsetPostgreSql 12 JDBC 多结果集,只能获取第一个结果集
【发布时间】:2020-08-15 20:27:39
【问题描述】:

希望 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。谷歌搜索了很多,但无法使其工作。如何获得第二个结果集?

【问题讨论】:

    标签: postgresql jdbc multiple-resultsets


    【解决方案1】:

    这个link对我帮助很大,问题也解决了。

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

    Java:

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 2014-05-25
      • 2012-01-24
      • 2015-01-28
      • 2016-12-26
      • 2011-11-21
      相关资源
      最近更新 更多