Utilisation de plusieurs jeux de résultats

Télécharger le pilote JDBC

Lors de l’utilisation de procédures stockées SQL ou SQL Server incluses qui retournent plusieurs jeux de résultats, le pilote Microsoft JDBC pour SQL Server fournit la méthode getResultSet de la classe SQLServerStatement pour récupérer chaque jeu de données retourné. En outre, lors de l’exécution d’une instruction qui retourne plus d’un jeu de résultats, vous pouvez utiliser la méthode execute de la classe SQLServerStatement car elle retourne une valeur boolean qui indique si la valeur retournée est un jeu de résultats ou un nombre de mises à jour.

Si la méthode execute retourne la valeur true, l’instruction exécutée a retourné au moins un jeu de résultats. Vous pouvez accéder au premier jeu de résultats en appelant la méthode getResultSet. Pour déterminer si des jeux de résultats supplémentaires sont disponibles, vous pouvez appeler la méthode getMoreResults, qui retourne une valeur booleantrue en cas de disponibilité de jeux de résultats supplémentaires. Si des jeux de résultats supplémentaires sont disponibles, vous pouvez appeler la méthode getResultSet pour y accéder, tout en continuant le processus jusqu’à ce que tous les jeux de résultats soient traités. Si la méthode getMoreResults retourne la valeur false, cela signifie qu'il n'y a plus de jeux de résultats à traiter.

Si la méthode execute retourne la valeur false, cela signifie que l’instruction exécutée a retourné un nombre de mises à jour, que vous pouvez extraire en appelant la méthode getUpdateCount.

Notes

Pour plus d’informations sur le nombre de mises à jour, consultez Utiliser une procédure stockée avec un nombre de mises à jour.

Dans l’exemple suivant, une connexion ouverte à l’exemple de base de données AdventureWorks2022 est transmise à la fonction et une instruction SQL est créée, qui retourne deux jeux de résultats lors de son exécution :

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

Dans ce cas, le nombre de jeux de résultats retourné est deux. Cependant, le code est écrit de telle façon que si un nombre inconnu de jeux de résultats est retourné, comme lors de l'appel d'une procédure stockée, tous les jeux de résultats sont traités. Pour accéder à un exemple d'appel de procédure stockée qui renvoie plusieurs jeux de résultats avec des valeurs de mise à jour, consultez Gestion d'instructions complexes.

Notes

Lors de l'appel de la méthode getMoreResults de la classe SQLServerStatement, le jeu de résultats précédemment retourné est implicitement fermé.

Voir aussi

Utilisation d'instructions avec le pilote JDBC