Partilhar via


Usando vários conjuntos de resultados

Baixar driver JDBC

Ao trabalhar com procedimentos armazenados SQL ou SQL Server inline que retornam mais do que 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 devolvidos. Além disso, ao executar uma instrução que devolve mais do que um conjunto de resultados, pode usar o método execute da classe SQLServerStatement, pois devolverá um valor booleano que indica se o valor devolvido é um conjunto de resultados ou uma contagem de atualizações.

Se o método execute devolver verdadeiro, a instrução executada devolveu um ou mais conjuntos de resultados. Pode aceder ao primeiro conjunto de resultados chamando o método getResultSet. Para determinar se existem mais conjuntos de resultados disponíveis, pode chamar o método getMoreResults , que devolve um valor booleano de verdadeiro se houver mais conjuntos de resultados disponíveis. Se houver mais conjuntos de resultados disponíveis, pode chamar novamente o método getResultSet para aceder a eles, continuando o processo até que todos os conjuntos de resultados tenham sido processados. Se o método getMoreResults devolver false, não há mais conjuntos de resultados para processar.

Se o método execute devolver false, a instrução executada devolveu um valor de contagem de atualizações, que pode recuperar chamando o método getUpdateCount .

Observação

Para mais informações sobre contagens de atualizações, consulte Utilizar um procedimento armazenado com contagem de atualizações.

No exemplo seguinte, uma ligação aberta à base de dados de exemplo AdventureWorks2025 é passada para a função, e é construída uma instrução SQL que, quando executada, devolve 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, sabe-se que o número de conjuntos de resultados devolvidos é dois. No entanto, o código é escrito de forma a que, se um número desconhecido de conjuntos de resultados fosse devolvido, como ao chamar um procedimento armazenado, todos seriam processados. Para ver um exemplo de chamar um procedimento armazenado que devolve múltiplos conjuntos de resultados juntamente com valores de atualização, veja Lidar com instruções complexas.

Observação

Quando faz a chamada ao método getMoreResults da classe SQLServerStatement, o conjunto de resultados anteriormente devolvido fica implicitamente fechado.

Consulte também

Utilização de instruções com o driver JDBC