JDBC - Stapelverarbeitung
Mit der Stapelverarbeitung können Sie verwandte SQL-Anweisungen in einem Stapel gruppieren und mit einem Aufruf an die Datenbank senden.
Wenn Sie mehrere SQL-Anweisungen gleichzeitig an die Datenbank senden, reduzieren Sie den Kommunikationsaufwand und verbessern so die Leistung.
JDBC-Treiber sind nicht erforderlich, um diese Funktion zu unterstützen. Sie sollten die DatabaseMetaData.supportsBatchUpdates () -Methode verwenden, um festzustellen, ob die Zieldatenbank die Stapelaktualisierungsverarbeitung unterstützt. Die Methode gibt true zurück, wenn Ihr JDBC-Treiber diese Funktion unterstützt.
Das addBatch()Die Methoden Statement, PreparedStatement und CallableStatement werden verwendet, um dem Stapel einzelne Anweisungen hinzuzufügen. DasexecuteBatch() wird verwendet, um die Ausführung aller zusammen gruppierten Anweisungen zu starten.
Das executeBatch() Gibt ein Array von Ganzzahlen zurück, und jedes Element des Arrays repräsentiert die Aktualisierungsanzahl für die jeweilige Aktualisierungsanweisung.
So wie Sie einem Stapel Anweisungen zur Verarbeitung hinzufügen können, können Sie sie mit dem entfernen clearBatch()Methode. Diese Methode entfernt alle Anweisungen, die Sie mit der Methode addBatch () hinzugefügt haben. Sie können jedoch nicht selektiv auswählen, welche Anweisung entfernt werden soll.
Batching mit Anweisungsobjekt
Hier ist eine typische Abfolge von Schritten zur Verwendung der Stapelverarbeitung mit Anweisungsobjekt:
Erstellen Sie ein Anweisungsobjekt mit einer der Methoden createStatement () .
Setzen Sie Auto-Commit mit setAutoCommit () auf false .
Fügen Sie mit der Methode addBatch () für das erstellte Anweisungsobjekt beliebig viele SQL-Anweisungen zum Stapel hinzu .
Führen Sie alle SQL-Anweisungen mit der Methode executeBatch () für das erstellte Anweisungsobjekt aus.
Übernehmen Sie abschließend alle Änderungen mit der Methode commit () .
Beispiel
Das folgende Codefragment enthält ein Beispiel für eine Stapelaktualisierung mit dem Anweisungsobjekt:
// 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();
Lassen Sie uns zum besseren Verständnis den Batching - Beispielcode studieren .
Stapeln mit PrepareStatement-Objekt
Hier ist eine typische Abfolge von Schritten zur Verwendung der Stapelverarbeitung mit PrepareStatement-Objekt:
Erstellen Sie SQL-Anweisungen mit Platzhaltern.
Erstellen Sie das PrepareStatement-Objekt mit den Methoden prepareStatement () .
Setzen Sie Auto-Commit mit setAutoCommit () auf false .
Fügen Sie mit der Methode addBatch () für das erstellte Anweisungsobjekt beliebig viele SQL-Anweisungen zum Stapel hinzu .
Führen Sie alle SQL-Anweisungen mit der Methode executeBatch () für das erstellte Anweisungsobjekt aus.
Übernehmen Sie abschließend alle Änderungen mit der Methode commit () .
Das folgende Codefragment enthält ein Beispiel für eine Stapelaktualisierung mit dem PrepareStatement-Objekt:
// 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();
Lassen Sie uns zum besseren Verständnis den Batching - Beispielcode studieren .