Usar múltiples conjuntos de resultados

Cuando se trabaja con procedimientos incluidos o almacenados de SQL o de SQL Server que devuelven más de un conjunto de resultados, el controlador JDBC de Microsoft SQL Server proporciona el método getResultSet en la clase SQLServerStatement para recuperar todos los conjuntos de resultados devueltos. Además, si ejecuta una instrucción que devuelva más de un conjunto de resultados, puede usar el método execute de la clase SQLServerStatement, porque devolverá un valor boolean que indica que el valor devuelto es un conjunto de resultados o un recuento de actualización.

Si el método execute devuelve true, la instrucción que se ha ejecutado ha devuelto uno o más conjuntos de resultados. Puede tener acceso al primer conjunto de resultados llamando al método getResultSet. Para determinar si hay más conjuntos de resultados disponibles, puede llamar al método getMoreResults, que devuelve el valor boolean true si hay disponibles más conjuntos de resultados. Si hay disponibles más conjuntos de resultados, puede volver a llamar al método getResultSet para tener acceso a ellos, continuando el proceso hasta haber procesado todos los conjuntos de resultados. Si el método getMoreResults devuelve false, no hay más conjuntos de resultados que procesar.

Si el método execute devuelve false, la instrucción que se ha ejecutado ha devuelto un valor de recuento de actualización, que puede recuperar llamando al método getUpdateCount.

Nota

Para obtener más información sobre recuentos de actualizaciones, vea Usar un procedimiento almacenado con un recuento de actualizaciones.

En el siguiente ejemplo, se pasa a la función una conexión abierta a la base de datos de ejemplo SQL Server 2005 AdventureWorks y se construye una instrucción SQL que, cuando se ejecuta, devuelve dos conjuntos de resultados:

public static void executeStatement(Connection con) {
   try {
      String SQL = "SELECT TOP 10 * FROM Person.Contact; " +
                   "SELECT TOP 20 * FROM Person.Contact";
      Statement stmt = con.createStatement();
      boolean results = stmt.execute(SQL);
      int rsCount = 0;

      //Loop through the available result sets.
     do {
        if(results) {
           ResultSet rs = stmt.getResultSet();
           rsCount++;

           //Show data from the result set.
           System.out.println("RESULT SET #" + rsCount);
           while (rs.next()) {
              System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));
           }
           rs.close();
        }
        System.out.println();
        results = stmt.getMoreResults();
        } while(results);
      stmt.close();
      }
   catch (Exception e) {
      e.printStackTrace();
   }
}

En este caso, se sabe que el número de conjuntos de resultados que se devuelven es dos. No obstante, el código está escrito de forma que si se devolviera un número desconocido de conjuntos de resultados, como cuando se llama a un procedimiento almacenado, se procesarían todos. Para ver un ejemplo de llamada a un procedimiento almacenado que devuelve múltiples conjuntos de resultados además de valores de actualización, consulte Controlar instrucciones complejas.

Nota

Cuando hace la llamada al método getMoreResults de la clase SQLServerStatement, se cierra el conjunto de resultados que se había devuelto anteriormente.

Vea también

Otros recursos

Usar instrucciones con el controlador JDBC