stored-procedures - 带有 jdbc 和存储过程(函数)的 postgresql : ResultSet

标签 stored-procedures jdbc stored-functions psql

我只是尝试从服务器 (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 循环中做了同样的事情......没有显示更多内容。

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

谢谢!

最佳答案

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

只需使用一个 select 和一个常规的语句:

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

关于stored-procedures - 带有 jdbc 和存储过程(函数)的 postgresql : ResultSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668367/

相关文章:

xml - 查询SQL Server 2016数据库中的XML数据

java - 尝试将数据插入 MySQL 时出错

java - Java-GSS启动失败异常,由以下原因引起:org.apache.thrift.transport.TTransportException:GSS启动失败

postgresql - 在 psql 中为 Postgres 函数体访问\设置变量

mysql 相当于 oracle utl_file

php - MySQL 存储过程无法从 ajax/php 运行

sql - 我应该在创建函数后提交吗?

mysql - 从同一个表mysql存储过程中选择具有不同条件的多个计数

mysql - SELECT 可以单独工作,但在分配给游标时返回 0 行

java - eclipse中如何添加mysql驱动jar文件