【问题标题】:postgresql with jdbc and stored procedures (functions): ResultSet带有 jdbc 和存储过程(函数)的 postgresql:ResultSet
【发布时间】:2012-11-20 00:58:00
【问题描述】:

我刚刚尝试从服务器调用存储函数 (getStat),如下所示:

create type stat as (type text, location text, number int);
create function getStat() returns setof stat as 'select distinct table1.type, table1.location, table1.number from table1, table2 where table2.finding=10 order by number desc;' language 'sql';

现在这里是 jdbc 代码:

CallableStatement callable = null;

    String storedProc = "{call getStat(?, ?, ?)}";

    try {
        callable = connection.prepareCall(storedProc);

        callable.registerOutParameter(1, java.sql.Types.VARCHAR);
        callable.registerOutParameter(2, java.sql.Types.VARCHAR);
        callable.registerOutParameter(3, java.sql.Types.INTEGER);

        boolean results = callable.execute();

        System.out.println(callable.getString(1));
        System.out.println(callable.getString(2));
        System.out.println(callable.getInt(3));

        while(results){
            ResultSet rs = callable.getResultSet();
            while(rs.next()){
                System.out.println(rs.getString(1));
                System.out.println(rs.getString(2));
                System.out.println(rs.getInt(3));
            }
            //rs.close();

            results = callable.getMoreResults();
        }

好的,现在问题来了: 当我调用它时,它只是打印出整个批量的第一行,应该是 printend。是的,这很清楚,因为我执行了以下代码:

            System.out.println(callable.getString(1));
            System.out.println(callable.getString(2));
            System.out.println(callable.getInt(3));

但我在 while 循环中做了同样的事情......并且没有显示更多内容。

也许问题很明显,但我错过了:(

谢谢!

【问题讨论】:

    标签: stored-procedures jdbc stored-functions psql


    【解决方案1】:

    无需使用具有{call ...} 语法的 CallableStatement。

    只需使用一个选择和一个普通的Statement

    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery("select * from getStat()");
    while (rs.next())
    {
      System.out.println(rs.getString(1));
      System.out.println(rs.getString(2));
      System.out.println(rs.getInt(3));
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-18
      • 2021-06-29
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 2012-01-12
      • 1970-01-01
      • 2015-12-17
      相关资源
      最近更新 更多