Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы повысить производительность при выполнении нескольких обновлений баз данных 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();
}
}