Gestione delle istruzioni complesse

Scaricare il driver JDBC

Quando si usa Microsoft JDBC Driver per SQL Server, può essere necessario gestire istruzioni complesse, incluse le istruzioni generate dinamicamente in fase di esecuzione. Le istruzioni complesse spesso eseguono diversi tipi di attività, inclusi aggiornamenti, inserimenti ed eliminazioni. Questi tipi di istruzioni possono anche 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, il driver JDBC fornisce numerosi metodi che consentono di eseguire query sugli oggetti e sui dati restituiti, in modo che l'applicazione 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 aggiornamenti.

Se il tipo di oggetto o di dati restituito è noto, è possibile usare il metodo getResultSet o getUpdateCount per l'elaborazione dei dati. Per continuare con l'oggetto o i dati successivi restituiti dall'istruzione complessa, chiamare il metodo getMoreResults.

Nell'esempio seguente viene passata alla funzione una connessione aperta al database di esempio AdventureWorks2022, viene creata un'istruzione complessa che combina una chiamata di stored procedure con un'istruzione SQL, vengono eseguite le istruzioni e quindi viene usato un ciclo do per elaborare tutti i set di risultati e vengono restituiti i conteggi aggiornati.

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

Vedi anche

Uso delle istruzioni con il driver JDBC