English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JDBC пакетная обработка (Batch)

Пакет позволяет вам группировать связанные SQL-предложения в пакет и提交 их с помощью одного вызова базы данных.

Когда вы отправляете несколько SQL-предложений в базу данных за один раз, можно уменьшить затраты на коммуникацию, что улучшает производительность.

  • Драйвер JDBC не требует поддержки этой функции. Вы должны использовать метод DatabaseMetaData.supportsBatchUpdates () для определения, поддерживает ли целевая база данных обработку пакетных обновлений. Если драйвер JDBC поддерживает эту функцию, метод возвращает true.

  • Методы addBatch () Statement, PreparedStatement и CallableStatement используются для добавления отдельных предложений в пакет. Метод executeBatch () используется для начала выполнения всех объединенных предложений в пакете.

  • executeBatch() возвращает массив целых чисел, каждый элемент которого представляет счетчик обновлений соответствующего запроса update.

  • Как и добавление запросов в пакет для обработки, вы можете использовать метод clearBatch () для их удаления. Этот метод удаляет все запросы, добавленные с помощью метода addBatch (). Однако, выбрать запросы для удаления нельзя.

Использование объекта запроса для пакетов

Это пример последовательности шагов для использования пакетов с объектом Statement:

  • Используйте эти дваcreateStatement()Метод создает объект Statement.

  • Используйте setAutoCommit () для установки auto-commit в false.

  • Используйте метод addBatch () для добавления любого количества SQL-запросов в пакет на созданном объекте запроса.

  • Используйте метод executeBatch () для выполнения всех SQL-запросов на созданном объекте запроса.

  • В конце концов, используйтеcommit()Метод подает все изменения.

Пример

Следующий фрагмент кода предоставляет пример использования объекта Statement для пакетного обновления

// Создайте объект запроса
Statement stmt = conn.createStatement();
// Установите автоматическую подачу в false
conn.setAutoCommit(false);
//Создать SQL-запрос
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(200,'Zia', 'Ali', 30)";
// Добавьте上面的 SQL-запрос в пакет.
stmt.addBatch(SQL);
// Создайте еще один SQL-запрос
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(201,'Raj', 'Kumar', 35)";
// Добавьте上面的 SQL-запрос в пакет.
stmt.addBatch(SQL);
// Создайте еще один SQL-запрос
String SQL = "UPDATE Employees SET age = 35 " +
             "WHERE id = 100";
// Добавьте上面的 SQL-запрос в пакет.
stmt.addBatch(SQL);
// Создайте int [] для хранения возвращаемых значений
int[] count = stmt.executeBatch();
//Ясно указать команду для применения изменений
conn.commit();

Чтобы лучше понять, давайте рассмотримПример кода пакетной обработки.

Использование PrepareStatement для пакетов

Это пример последовательности шагов для использования пакетов с объектом PrepareStatement:

  1. Используйте占位щики для создания SQL-запросов.

  2. Используйте любой метод PrepareStatement() для создания объекта PrepareStatement.

  3. Используйте setAutoCommit () для установки auto-commit в false.

  4. Используйте метод addBatch () для добавления как можно большего количества SQL-запросов в пакет.

  5. Используйте метод executeBatch () для выполнения всех SQL-запросов на созданном объекте запроса.

  6. В конце концов, используйтеcommit()Метод подает все изменения.

Следующий фрагмент кода предоставляет пример пакетного обновления с использованием объекта PreparedStatemen-

//Создать SQL-запрос
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(?, ?, ?, ?)";
//Создать объект PreparedStatemen
PreparedStatemen pstmt = conn.prepareStatement(SQL);
//Установить автоматическую поддержку транзакций в false
conn.setAutoCommit(false);
//Установить переменные
pstmt.setInt(1, 400);
pstmt.setString(2, "Pappu");
pstmt.setString(3, "Singh");
pstmt.setInt(4, 33);
//Добавить к пакету
pstmt.addBatch();
//Установить переменные
pstmt.setInt(1, 401);
pstmt.setString(2, "Pawan");
pstmt.setString(3, "Singh");
pstmt.setInt(4, 31);
//Добавить к пакету
pstmt.addBatch();
//Добавить больше пакетов
.
.
.
.
//Создать int[] для хранения возвращенных значений
int[] count = stmt.executeBatch();
//Ясно указать команду для применения изменений
conn.commit();

Чтобы лучше понять, давайте рассмотримПример кода пакетной обработки.