Partager via


Gestion d'instructions complexes

Lors de l'utilisation du pilote JDBC de Microsoft SQL Server 2005, il se peut que vous deviez gérer des instructions complexes, notamment celles générées de façon dynamique en cours d'exécution. Les instructions complexes effectuent souvent une série 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 efficacement des instructions complexes, le pilote JDBC offre plusieurs 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é du traitement d'instructions complexes est la méthode execute de la classe SQLServerStatement. Cette méthode retourne une valeur boolean. 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 getUpdateCount pour traiter ces données. Pour traiter l'objet ou les données suivants retournés par l'instructions complexe, vous pouvez appeler la méthode getMoreResults.

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

public static void executeComplexStatement(Connection con) {
   try {
      String sqlStringWithUnknownResults = "{call dbo.uspGetEmployeeManagers(50)};SELECT TOP 10 * FROM Person.Contact";
      Statement stmt = con.createStatement();
      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);
      rs.close();
      stmt.close();
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

Voir aussi

Autres ressources

Utilisation d'instructions avec le pilote JDBC