Como usar vários conjuntos de resultados

Baixar Driver JDBC

Ao trabalhar com procedimentos armazenados SQL ou SQL Server embutidos que retornam mais de um conjunto de resultados, o Microsoft JDBC Driver para SQL Server fornece o método getResultSet na classe SQLServerStatement para recuperar cada conjunto de dados retornados. Além disso, ao executar uma instrução que retorna mais de um conjunto de resultados, você pode usar o método execute da classe SQLServerStatement, pois ele retornará um valor booliano que indica se o valor retornado é um conjunto de resultados ou uma contagem de atualização.

Se o método execute retorna true, isso significa que a instrução executada retornou um ou mais conjuntos de resultados. Você pode acessar o primeiro conjunto de resultados chamando o método getResultSet. Para determinar se mais conjuntos de resultados estão disponíveis, você pode chamar o método getMoreResults, que retornará um valor booliano de true se mais conjuntos de resultados estiverem disponíveis. Se mais conjuntos de resultados estiverem disponíveis, você poderá chamar o método getResultSet novamente para acessá-los, continuando o processo até que todos os conjuntos de resultados tenham sido processados. Se o método getMoreResults retornar false, não haverá nenhum mais conjuntos de resultados para processar.

Se o método execute retorna false, a instrução executada retornou um valor de contagem de atualização que você pode recuperar chamando o método getUpdateCount.

Observação

Para obter mais informações sobre contagens de atualização, confira Usar um procedimento armazenado com uma contagem de atualização.

No seguinte exemplo, uma conexão aberta para o banco de dados de exemplo AdventureWorks2022 é passada para a função e uma instrução SQL é construída que, quando executada, retorna dois 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();
    }
}

Neste caso, o número de conjuntos de resultados retornado é conhecido para ser dois. Porém, o código é escrito de forma que, se um número desconhecido de conjuntos de resultados fosse retornado, como ao chamar um procedimento armazenado, todos eles seriam processados. Para ver um exemplo de chamada de procedimento armazenado que retorna vários conjuntos de resultados junto com valores de atualização, confira Tratando instruções complexas.

Observação

Quando você realizar a chamada para o método getMoreResults da classe SQLServerStatement, o conjunto de resultados previamente retornado estará fechado implicitamente.

Confira também

Como usar instruções com o JDBC Driver