Freigeben über


Ausführen von Batchvorgängen

JDBC-Treiber herunterladen

Um die Leistung zu verbessern, wenn mehrere Aktualisierungen an einer SQL Server-Datenbank vorgenommen werden, bietet der Microsoft JDBC-Treiber für SQL Server die Möglichkeit, mehrere Aktualisierungen als eine einzige Arbeitseinheit zu übermitteln, auch als Batch bezeichnet.

Zum Übermitteln von Batchupdates können die Klassen SQLServerStatement, SQLServerPreparedStatement und SQLServerCallableStatement verwendet werden. Mit der addBatch-Methode können Sie einen Befehl hinzufügen. Mit der clearBatch-Methode können Sie die Liste der Befehle löschen. Mit der executeBatch-Methode können Sie alle zu verarbeitenden Befehle übermitteln. In einem Batch können nur DDL- (Data Definition Language) und DML-Anweisungen (Data Manipulation Language) ausgeführt werden, die eine einfache Updatezählung zurückgeben.

Die executeBatch-Methode gibt ein Array mit ganzzahligen Werten zurück, die der Updatezählung der einzelnen Befehle entsprechen. Wenn einer der Befehle fehlschlägt, wird BatchUpdateException ausgelöst, und Sie sollten die getUpdateCounts-Methode der BatchUpdateException-Klasse verwenden, um das Array von aktualisierten Zählerwerten abzurufen. Wenn ein Befehl fehlschlägt, wird die Verarbeitung der restlichen Befehle vom Treiber fortgesetzt. Wenn ein Befehl einen Syntaxfehler enthält, schlagen die Anweisungen im Batch allerdings fehl.

Hinweis

Wenn Sie keine Aktualisierungszählungen verwenden müssen, können Sie zunächst eine SET NOCOUNT ON-Anweisung an SQL Server senden. Dadurch wird das Verkehrsaufkommen im Netzwerk verringert und zusätzlich die Leistung der Anwendung verbessert.

Erstellen Sie als Beispiel die folgende Tabelle in der AdventureWorks2022-Beispieldatenbank:

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

Im folgenden Beispiel wird eine offene Verbindung mit der AdventureWorks2022-Beispieldatenbank an die Funktion übergeben, mit der addBatch-Methode werden die auszuführenden Anweisungen erstellt, und die executeBatch-Methode wird aufgerufen, um den Batch an die Datenbank zu übermitteln.

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

Weitere Informationen

Verwenden von Anweisungen mit dem JDBC-Treiber