Uso di più set di risultati

Scaricare il driver JDBC

Quando si lavora con istruzioni SQL inline o stored procedure di SQL Server che restituiscono più set di risultati, il Microsoft JDBC Driver for SQL Server mette a disposizione il metodo getResultSet nella classe SQLServerStatement per recuperare ogni set di dati restituito. Quando si esegue un'istruzione che restituisce più set di risultati, è inoltre possibile usare il metodo execute della classe SQLServerStatement, che restituisce un valore booleano che indica se il valore restituito è un set di risultati o un conteggio aggiornamenti.

Se il metodo execute restituisce true, l'istruzione eseguita ha restituito uno o più set di risultati. Per accedere al primo set di risultati, chiamare il metodo getResultSet. Per determinare se sono disponibili ulteriori set di risultati, chiamare il metodo getMoreResults che, in caso affermativo, restituisce un valore booleanotrue. Se sono disponibili più set di risultati, chiamare di nuovo il metodo getResultSet per visualizzarli. È possibile ripetere la procedura finché non sono stati elaborati tutti i set di risultati. Se il metodo getMoreResults restituisce false, non sono presenti altri set di risultati da elaborare.

Se il metodo execute restituisce false, l'istruzione eseguita ha restituito un valore di conteggio aggiornamenti che può essere recuperato chiamando il metodo getUpdateCount.

Nota

Per ulteriori informazioni sul conteggio degli aggiornamenti, consultare Utilizzo di una procedura memorizzata con il conteggio degli aggiornamenti.

Nell'esempio seguente viene passata una connessione aperta al database di esempio AdventureWorks2025 alla funzione e viene costruita un'istruzione SQL che, quando viene eseguita, restituisce due set di risultati:

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();
    }
}

In questo caso, è noto che il numero di set di risultati restituiti sia due. Tuttavia, il codice è scritto in modo tale che se fosse restituito un numero non noto di set di risultati, come, ad esempio, nelle chiamate a stored procedure, tutti i set verranno comunque elaborati. Per un esempio di chiamata a una stored procedure che restituisce più set di risultati oltre a valori di aggiornamento, vedere Gestione delle istruzioni complesse.

Nota

Quando si esegue una chiamata al metodo getMoreResults della classe SQLServerStatement, il set di risultati restituito in precedenza viene implicitamente chiuso.