2012-12-02 3 views
2

난 그냥 서버 (getStat)에서 저장된 함수를 호출하려고 그 같이 찾고 :PostgreSQL의 : ResultSet의

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해야 전체 부피의 첫 번째 줄을, 출력합니다. 그래, 그게 분명해, 다음 코드를 실행하기 때문에 :

그러나 나는 while 루프에서 동일한 작업을 수행하지만 더 이상 아무것도 표시되지 않습니다.

아마 문제는 무엇인가 분명하다,하지만 난 실종 :(그

감사합니다!

답변

6

{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)); 
} 
+0

그리고 I에 유래를 좋아하는 이유는 당신은 신속하고 유능한 도움을 찾는 프로그램에 문제가 0123?이름이없는 감사 말, 큰 일을했습니다 :) – user1252280

+0

정말 도움이되었습니다, 감사합니다! –