Ausführen von Batchoperationen

Um die Leistung bei mehreren Updates einer SQL Server-Datenbank zu verbessern, bietet Microsoft SQL Server JDBC Driver die Möglichkeit, mehrere Updates als einzelne Arbeitseinheit (auch Batch genannt) zu übermitteln.

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 int-Werten zurück, die der Updatezählung der einzelnen Befehle entsprechen. Wenn ein Befehl fehlschlägt, wird eine BatchUpdateException ausgegeben. Sie sollten dann mit der getUpdateCounts-Methode der BatchUpdateException-Klasse das Array mit den Updatezählungen abrufen. 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 keine Updatezählungen verwendet werden müssen, können Sie zuerst eine SET NOCOUNT ON-Anweisung an SQL Server ausgeben. Dadurch wird das Verkehrsaufkommen im Netzwerk verringert und zusätzlich die Leistung der Anwendung verbessert.

Erstellen Sie als Beispiel die folgende Tabelle in der SQL Server 2005 AdventureWorks-Beispieldatenbank:

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

Im folgenden Beispiel werden eine offene Verbindung zur AdventureWorks-Beispieldatenbank an die Funktion übergeben, mit der addBatch-Methode werden die auszuführenden Anweisungen erstellt, und die executeBatch-Methode wird aufgerufen, um den Stapel 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();
   }
}

Siehe auch

Andere Ressourcen

Verwenden von Anweisungen mit dem JDBC-Treiber