Uso di più set di risultati
Quando si usano stored procedure di SQL Server o SQL inline che restituiscono più set di risultati, Microsoft JDBC Driver per SQL Server offre il metodo getResultSet della classe SQLServerStatement per il recupero di ciascun 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 altre informazioni sui conteggi di aggiornamento, vedere Uso di una stored procedure con i conteggi di aggiornamento.
Nell'esempio seguente viene passata una connessione aperta al database di esempio AdventureWorks2022 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 il numero di set di risultati (pari a due) è noto. 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.