Gestion des instructions complexes

Télécharger le pilote JDBC

Lors de l'utilisation du pilote Microsoft JDBC pour SQL Server, vous pouvez être amené à gérer des instructions complexes, notamment celles générées de façon dynamique au moment de l'exécution. Les instructions complexes effectuent souvent différents types de tâches, telles que des mises à jour, des insertions et des suppressions. Ces types d'instructions peuvent également retourner plusieurs jeux de résultats et paramètres de sortie. Dans ce cas, le code Java exécutant les instructions pourrait ne pas connaître à l'avance les types et le nombre d'objets, ainsi que les données retournées.

Pour traiter des instructions complexes, le pilote JDBC offre de nombreuses méthodes permettant d'interroger les objets et les données retournées, de façon à ce que votre application puisse les traiter correctement. La clé pour traiter des instructions complexes est la méthode execute de la classe SQLServerStatement. Cette méthode retourne une valeur booléenne. Si la valeur est « true », le premier résultat retourné par les instructions est un jeu de résultats. Si la valeur est « false », le premier résultat retourné est un nombre de mises à jour.

Si vous connaissez le type d’objet ou de données retourné, vous pouvez utiliser la méthode getResultSet ou la méthode getUpdateCount pour traiter ces données. Pour continuer avec l’objet ou les données suivants parmi ceux qui ont été retournés par l’instruction complexe, vous pouvez appeler la méthode getMoreResults.

Dans l’exemple suivant, une connexion ouverte à l’exemple de base de données AdventureWorks2022 est transmise à la fonction, une instruction complexe qui combine un appel de procédure stockée à une instruction SQL est générée, les instructions sont exécutées, puis une boucle do est utilisée pour traiter tous les jeux de résultats et nombres mis à jour retournés.

public static void executeComplexStatement(Connection con) {
    try (Statement stmt = con.createStatement();) {
        String sqlStringWithUnknownResults = "{call dbo.uspGetEmployeeManagers(50)}; SELECT TOP 10 * FROM Person.Contact";
        boolean results = stmt.execute(sqlStringWithUnknownResults);
        int count = 0;
        do {
            if (results) {
                ResultSet rs = stmt.getResultSet();
                System.out.println("Result set data displayed here.");
            }
            else {
                count = stmt.getUpdateCount();
                if (count >= 0) {
                    System.out.println("DDL or update data displayed here.");
                }
                else {
                    System.out.println("No more results to process.");
                }
            }
            results = stmt.getMoreResults();
        }
        while (results || count != -1);
    }
    // Handle any errors that may have occurred.
    catch (SQLException e) {
        e.printStackTrace();
    }
}

Voir aussi

Utilisation d'instructions avec le pilote JDBC