Empleo de varios conjuntos de resultados

Descargar controlador JDBC

Cuando se trabaja con procedimientos almacenados de SQL Server o de SQL insertados que devuelven más de un conjunto de resultados, el controlador JDBC de Microsoft para 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, ya que devuelve un valor booleano que indica si 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 acceder al primer conjunto de resultados si llama al método getResultSet. Para determinar si hay más conjuntos de resultados disponibles, puede llamar al método getMoreResults, que devuelve un valor booleano de true si hay más conjuntos de resultados disponibles. Si hay disponibles más conjuntos de resultados, puede volver a llamar al método getResultSet para acceder a ellos, continuando el proceso hasta que se hayan 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 se puede recuperar al llamar al método getUpdateCount.

Nota:

Para obtener más información sobre los recuentos de actualizaciones, consulte Empleo de un procedimiento almacenado con un recuento de actualización.

En el siguiente ejemplo, se pasa a la función una conexión abierta a la base de datos de ejemplo AdventureWorks2022 y se crea una instrucción SQL que, al ejecutarse, devuelve dos conjuntos de resultados:

public static void executeStatement(Connection con) {
    try (Statement stmt = con.createStatement();) {
        String SQL = "SELECT TOP 10 * FROM Person.Contact; SELECT TOP 20 * FROM Person.Contact";

        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"));
                }
            }
            System.out.println();
            results = stmt.getMoreResults();
        } while (results);
    }
    // Handle any errors that may have occurred.
    catch (SQLException 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 varios conjuntos de resultados junto con valores de actualización, vea Control de 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.

Consulte también

Empleo de instrucciones con el controlador JDBC