Gestione delle istruzioni complesse

Quando si utilizza il driver JDBC per Microsoft SQL Server 2005 può essere necessario gestire istruzioni complesse, incluse le istruzioni generate dinamicamente in fase di esecuzione. Le istruzioni complesse eseguono spesso varie attività, inclusi aggiornamenti, inserimenti ed eliminazioni. Questi tipi di istruzioni potrebbero inoltre restituire più set di risultati e parametri di output. In questi casi, nel codice Java che consente di eseguire le istruzioni non sarà possibile stabilire in anticipo i tipi e il numero degli oggetti e dei dati restituiti.

Per elaborare le istruzioni complesse in modo efficace, il driver JDBC offre vari metodi che consentono di eseguire query sugli oggetti e sui dati restituiti, in modo che l'applicazione utilizzata possa elaborarli correttamente. Il metodo execute della classe SQLServerStatement è fondamentale per l'elaborazione delle istruzioni complesse. Questo metodo restituisce un valore boolean. Quando il valore è true, il primo risultato restituito dalle istruzioni è un set di risultati. Quando il valore è false, il primo risultato restituito è un conteggio di aggiornamento.

Se il tipo di oggetto o di dati restituiti è noto, è possibile utilizzare il metodo getResultSet o il metodo getUpdateCount per l'elaborazione dei dati. Per passare all'oggetto o ai dati successivi restituiti dall'istruzione complessa, chiamare il metodo getMoreResults.

Nell'esempio seguente viene passata alla funzione una connessione aperta al database di esempio AdventureWorks di SQL Server 2005, viene costruita un'istruzione complessa che combina una chiamata di stored procedure con un'istruzione SQL, le istruzioni vengono eseguite, quindi si utilizza un ciclo do per elaborare tutti i set di risultati e i conteggi di aggiornamento che sono stati restituiti.

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

Vedere anche

Altre risorse

Utilizzo delle istruzioni con il driver JDBC