Esecuzione di operazioni batch

Scaricare il driver JDBC

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

Le classi SQLServerStatement, SQLServerPreparedStatement e SQLServerCallableStatement possono essere usate tutte per inviare aggiornamenti in blocco. Il metodo addBatch viene usato per aggiungere un comando. Il metodo clearBatch viene usato per cancellare l'elenco dei comandi. Il metodo executeBatch viene usato 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. Se uno dei comandi ha esito negativo, viene generata un'eccezione BatchUpdateException ed è necessario usare il metodo getUpdateCounts della classe BatchUpdateException per recuperare la matrice del conteggio degli aggiornamenti. 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 usare 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.

Ad esempio, creare la seguente tabella nel database di esempio AdventureWorks2022:

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 AdventureWorks2022, il metodo addBatch viene usato 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();
   }
}

Vedi anche

Uso delle istruzioni con il driver JDBC