Esecuzione di operazioni batch

Per migliorare le prestazioni quando si eseguono più aggiornamenti di un database SQL Server, il driver JDBC Microsoft SQL Server 2005 consente di inoltrare più aggiornamenti come singola unità di lavoro, denominata anche batch.

Le classi SQLServerStatement, SQLServerPreparedStatement e SQLServerCallableStatement possono essere utilizzate tutte per inviare aggiornamenti in blocco. Il metodo addBatch viene utilizzato per aggiungere un comando. Il metodo clearBatch viene utilizzato per cancellare l'elenco dei comandi. Il metodo executeBatch viene utilizzato per inviare tutti i comandi per l'elaborazione. Possono essere eseguite come parte di un batch solo le istruzioni DDL (Data Definition Language) e DML (Data Manipulation Language) che restituiscono un semplice conteggio di aggiornamento.

Il metodo executeBatch restituisce una matrice di valori int che corrispondono al conteggio aggiornamenti di ogni comando. In caso di esecuzione non riuscita di uno dei comandi, viene generata un'eccezione BatchUpdateException ed è consigliabile utilizzare il metodogetUpdateCounts della classe BatchUpdateException per recuperare la matrice del conteggio di aggiornamento. Se un comando non riesce, il driver continua a elaborare i comandi rimanenti. Tuttavia, se un comando contiene un errore di sintassi sarà impossibile eseguire le istruzioni del batch.

Nota

Se non è necessario utilizzare i conteggi degli aggiornamenti, è possibile eseguire prima un'istruzione SET NOCOUNT ON in SQL Server. Il traffico di rete verrà ridotto e aumenteranno le prestazioni dell'applicazione.

Come esempio viene creata la seguente tabella nel database di esempio AdventureWorks di SQL Server 2005:

CREATE TABLE TestTable 
   (Col1 int IDENTITY, 
    Col2 varchar(50), 
    Col3 int);

Nell'esempio seguente viene passata alla funzione una connessione aperta al database di esempio AdventureWorks, il metodo addBatch viene utilizzato per creare le istruzioni da eseguire e viene eseguita la chiamata al metodo executeBatch per inviare il batch al database.

public static void executeBatchUpdate(Connection con) {
   try {
      Statement stmt = con.createStatement();
      stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('X', 100)");
      stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Y', 200)");
      stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Z', 300)");
      int[] updateCounts = stmt.executeBatch();
      stmt.close();
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

Vedere anche

Altre risorse

Utilizzo delle istruzioni con il driver JDBC