Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Stored procedures 带jdbc和存储过程(函数)的postgresql:ResultSet_Stored Procedures_Jdbc_Stored Functions_Psql - Fatal编程技术网

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

Stored procedures 带jdbc和存储过程(函数)的postgresql:ResultSet,stored-procedures,jdbc,stored-functions,psql,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 orde

我刚刚尝试从服务器(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));
}