Att utföra batchåtgärder

Ladda ned JDBC-drivrutin

För att förbättra prestanda när flera uppdateringar av en SQL Server-databas inträffar ger Microsoft JDBC-drivrutinen för SQL Server möjlighet att skicka flera uppdateringar som en enda arbetsenhet, även kallad en batch.

Klasserna SQLServerStatement, SQLServerPreparedStatement och SQLServerCallableStatement kan alla användas för att skicka batchuppdateringar. Metoden addBatch används för att lägga till ett kommando. Metoden clearBatch används för att rensa listan med kommandon. Metoden executeBatch används för att skicka alla kommandon för bearbetning. Endast Data Definition Language (DDL) och Data Manipulation Language (DML) instruktioner som returnerar ett enkelt uppdateringsantal kan köras som en del av en batch.

Metoden executeBatch returnerar en matris med int-värden som motsvarar uppdateringsantalet för varje kommando. Om ett av kommandona misslyckas genereras en BatchUpdateException och du bör använda metoden getUpdateCounts i klassen BatchUpdateException för att hämta matrisen för uppdateringsantal. Om ett kommando misslyckas fortsätter drivrutinen att bearbeta de återstående kommandona. Men om ett kommando har ett syntaxfel misslyckas instruktionerna i batchen.

Anmärkning

Om du inte behöver använda uppdateringsantal kan du först utfärda en SET NOCOUNT ON-instruktion till SQL Server. Detta minskar nätverkstrafiken och förbättrar dessutom programmets prestanda.

Skapa till exempel följande tabell i exempeldatabasen AdventureWorks2025:

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

I följande exempel skickas en öppen anslutning till AdventureWorks2025-exempeldatabasen till funktionen, metoden addBatch används för att skapa de instruktioner som ska köras och metoden executeBatch anropas för att skicka batchen till databasen.

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

Se även

Användning av instruktioner med JDBC-drivrutinen