JDBC - Elaborazione batch
L'elaborazione in batch consente di raggruppare le istruzioni SQL correlate in un batch e di inviarle con una chiamata al database.
Quando si inviano contemporaneamente più istruzioni SQL al database, si riduce la quantità di sovraccarico di comunicazione, migliorando così le prestazioni.
I driver JDBC non sono necessari per supportare questa funzione. È necessario utilizzare il metodo DatabaseMetaData.supportsBatchUpdates () per determinare se il database di destinazione supporta l'elaborazione dell'aggiornamento batch. Il metodo restituisce true se il driver JDBC supporta questa funzione.
Il addBatch()Il metodo Statement, PreparedStatement e CallableStatement viene utilizzato per aggiungere singole istruzioni al batch. IlexecuteBatch() serve per avviare l'esecuzione di tutte le istruzioni raggruppate insieme.
Il executeBatch() restituisce una matrice di numeri interi e ogni elemento della matrice rappresenta il conteggio degli aggiornamenti per la rispettiva istruzione di aggiornamento.
Così come è possibile aggiungere istruzioni a un batch per l'elaborazione, è possibile rimuoverle con l'estensione clearBatch()metodo. Questo metodo rimuove tutte le istruzioni che hai aggiunto con il metodo addBatch (). Tuttavia, non è possibile scegliere in modo selettivo quale istruzione rimuovere.
Batching con oggetto istruzione
Ecco una tipica sequenza di passaggi per utilizzare l'elaborazione in batch con l'oggetto istruzione:
Crea un oggetto Statement utilizzando uno dei metodi createStatement () .
Imposta il commit automatico su false usando setAutoCommit () .
Aggiungi tutte le istruzioni SQL che desideri in batch utilizzando il metodo addBatch () sull'oggetto istruzione creato.
Eseguire tutte le istruzioni SQL utilizzando il metodo executeBatch () sull'oggetto istruzione creato.
Infine, salva tutte le modifiche usando il metodo commit () .
Esempio
Il frammento di codice seguente fornisce un esempio di aggiornamento in batch utilizzando l'oggetto Statement:
// Create statement object
Statement stmt = conn.createStatement();
// Set auto-commit to false
conn.setAutoCommit(false);
// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
"VALUES(200,'Zia', 'Ali', 30)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);
// Create one more SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
"VALUES(201,'Raj', 'Kumar', 35)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);
// Create one more SQL statement
String SQL = "UPDATE Employees SET age = 35 " +
"WHERE id = 100";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);
// Create an int[] to hold returned values
int[] count = stmt.executeBatch();
//Explicitly commit statements to apply changes
conn.commit();
Per una migliore comprensione, studiamo il Batching - Codice di esempio .
Batching con PrepareStatement Object
Ecco una tipica sequenza di passaggi per utilizzare l'elaborazione in batch con l'oggetto PrepareStatement:
Crea istruzioni SQL con segnaposto.
Crea un oggetto PrepareStatement utilizzando uno dei metodi prepareStatement () .
Imposta il commit automatico su false usando setAutoCommit () .
Aggiungi tutte le istruzioni SQL che desideri in batch utilizzando il metodo addBatch () sull'oggetto istruzione creato.
Eseguire tutte le istruzioni SQL utilizzando il metodo executeBatch () sull'oggetto istruzione creato.
Infine, salva tutte le modifiche usando il metodo commit () .
Il frammento di codice seguente fornisce un esempio di aggiornamento batch utilizzando l'oggetto PrepareStatement:
// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
"VALUES(?, ?, ?, ?)";
// Create PrepareStatement object
PreparedStatemen pstmt = conn.prepareStatement(SQL);
//Set auto-commit to false
conn.setAutoCommit(false);
// Set the variables
pstmt.setInt( 1, 400 );
pstmt.setString( 2, "Pappu" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 33 );
// Add it to the batch
pstmt.addBatch();
// Set the variables
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "Pawan" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 31 );
// Add it to the batch
pstmt.addBatch();
//add more batches
.
.
.
.
//Create an int[] to hold returned values
int[] count = stmt.executeBatch();
//Explicitly commit statements to apply changes
conn.commit();
Per una migliore comprensione, studiamo il Batching - Codice di esempio .