Выполнение пакетных операций

Скачать драйвер JDBC

Чтобы повысить производительность при выполнении нескольких обновлений баз данных SQL Server, Microsoft JDBC Driver для SQL Server предоставляет возможность передавать несколько обновлений в единой рабочей единице, которая называется пакетом.

Для передачи пакетных обновлений можно использовать следующие классы: SQLServerStatement, SQLServerPreparedStatement и SQLServerCallableStatement. Метод addBatch используется для добавления команды. Метод clearBatch используется для очистки списка команд. Метод executeBatch используется для передачи всех команд для обработки. В качестве части пакета могут выполняться только инструкции языка описания данных DDL и языка обработки данных DML, возвращающие простой счетчик обновлений.

Метод executeBatch возвращает массив значений int, соответствующих счетчику обновлений каждой команды. При ошибке выполнения одной из команд создается исключение BatchUpdateException, и пользователю следует использовать метод getUpdateCounts класса BatchUpdateException для извлечения массива счетчиков обновления. При возникновении ошибки выполнения команды драйвер продолжает обработку остальных команд. Однако при наличии ошибки синтаксиса в команде происходит ошибка инструкций в пакете.

Примечание

Если отсутствуют счетчики обновлений, можно сначала отправить инструкцию SET NOCOUNT ON в SQL Server. Это позволит уменьшить объем сетевого трафика и увеличить производительность приложений.

Например, создайте следующую таблицу в образце базы данных AdventureWorks2022:

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

В следующем примере открытое подключение к образцу базы данных AdventureWorks2022 передается в функцию, метод addBatch используется для создания выполняемых инструкций, а метод executeBatch вызывается для отправки пакета в базу данных.

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

См. также раздел

Использование инструкций с JDBC Driver