2015-01-04 2 views
0

Например, у меня есть хранимая процедура, которая возвращает другое количество наборов результатов на основе входных параметров. Поэтому в Java я использую метод execute из класса Statement. Есть ли способ определить количество наборов результатов, возвращаемых методом execute()?Количество наборов результатов, возвращаемых методом execute

+0

Да, но мне также нужно в конце итерации, чтобы переставить на первом наборе результатов. – FanFan

ответ

1

Я не верю, что есть функция, которая, к сожалению, позволяет получить счетчик результатов.

Одним из возможных решений, если вам действительно нужен общий счетчик перед обработкой, было бы перебрать все результирующие наборы, собрать их в массив и затем обработать их в следующем цикле после получения счета. Вот рабочая (хотя и Postgres-специфические) демо:

import java.util.List; 
import java.util.ArrayList; 

import java.sql.DriverManager; 
import java.sql.Connection; 
import java.sql.Statement; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 

public class ResultSetCountDemo { 

    public static void main(String[] args) throws Exception { 

     Class.forName("org.postgresql.Driver"); 

     Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/main", "postgres", args.length >= 1 ? args[0] : ""); 

     // execute query 
     Statement st = con.createStatement(); 
     boolean b = st.execute("select 14, 'a' union all select 15, 'b'; select 26, 'x' union all select 27, 'y';"); 

     // collect and count result sets 
     List<ResultSet> rsList = new ArrayList<ResultSet>(); 
     int count = 0; 
     if (b) { 
      rsList.add(st.getResultSet()); 
      for (++count; st.getMoreResults(Statement.KEEP_CURRENT_RESULT); ++count) 
       rsList.add(st.getResultSet()); 
     } // end if 
     System.out.println(count+" set"+(count == 1 ? "" : "s")); 

     // process and close result sets 
     for (int s = 1; s <= count; ++s) { 
      ResultSet rs = rsList.get(s-1); 
      for (int r = 1; rs.next(); ++r) { 
       System.out.println("set "+s+" ("+r+","+1+") == "+rs.getInt(1)); 
       System.out.println("set "+s+" ("+r+","+2+") == "+rs.getString(2)); 
      } // end for 
      rs.close(); 
     } // end for 

     System.exit(0); 

    } // end main() 

} // end class ResultSetCountDemo 

Выход:

2 sets 
set 1 (1,1) == 14 
set 1 (1,2) == a 
set 1 (2,1) == 15 
set 1 (2,2) == b 
set 2 (1,1) == 26 
set 2 (1,2) == x 
set 2 (2,1) == 27 
set 2 (2,2) == y