Учебники

JDBC — Пакетная обработка

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

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

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

  • Метод addBatch () операторов Statement, PreparedStatement и CallableStatement используется для добавления отдельных операторов в пакет. ExecuteBatch () используется для запуска выполнения всех операторов, сгруппированных вместе.

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

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

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

Метод addBatch () операторов Statement, PreparedStatement и CallableStatement используется для добавления отдельных операторов в пакет. ExecuteBatch () используется для запуска выполнения всех операторов, сгруппированных вместе.

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

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

Пакетирование с объектом выписки

Вот типичная последовательность шагов для использования пакетной обработки с объектом выписки:

  • Создайте объект Statement с использованием любого метода createStatement () .

  • Установите auto-commit в false, используя setAutoCommit () .

  • Добавьте столько команд SQL, сколько вам нужно, в пакет, используя метод addBatch () для созданного объекта оператора.

  • Выполните все операторы SQL, используя метод executeBatch () для созданного объекта оператора.

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

Создайте объект Statement с использованием любого метода createStatement () .

Установите auto-commit в false, используя setAutoCommit () .

Добавьте столько команд SQL, сколько вам нужно, в пакет, используя метод addBatch () для созданного объекта оператора.

Выполните все операторы SQL, используя метод executeBatch () для созданного объекта оператора.

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

пример

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

// Create statement object
Statement stmt = conn.createStatement();

// Set auto-commit to false
conn.setAutoCommit(false);

// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(200,'Zia', 'Ali', 30)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);

// Create one more SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(201,'Raj', 'Kumar', 35)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);

// Create one more SQL statement
String SQL = "UPDATE Employees SET age = 35 " +
             "WHERE id = 100";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);

// Create an int[] to hold returned values
int[] count = stmt.executeBatch();

//Explicitly commit statements to apply changes
conn.commit();

Для лучшего понимания давайте изучим Batching — Example Code .

Пакетирование с объектом PrepareStatement

Вот типичная последовательность шагов для использования пакетной обработки с объектом PrepareStatement —

  1. Создайте операторы SQL с заполнителями.

  2. Создайте объект PrepareStatement с помощью любого метода prepareStatement () .

  3. Установите auto-commit в false, используя setAutoCommit () .

  4. Добавьте столько команд SQL, сколько вам нужно, в пакет, используя метод addBatch () для созданного объекта оператора.

  5. Выполните все операторы SQL, используя метод executeBatch () для созданного объекта оператора.

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

Создайте операторы SQL с заполнителями.

Создайте объект PrepareStatement с помощью любого метода prepareStatement () .

Установите auto-commit в false, используя setAutoCommit () .

Добавьте столько команд SQL, сколько вам нужно, в пакет, используя метод addBatch () для созданного объекта оператора.

Выполните все операторы SQL, используя метод executeBatch () для созданного объекта оператора.

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

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

// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(?, ?, ?, ?)";

// Create PrepareStatement object
PreparedStatemen pstmt = conn.prepareStatement(SQL);

//Set auto-commit to false
conn.setAutoCommit(false);

// Set the variables
pstmt.setInt( 1, 400 );
pstmt.setString( 2, "Pappu" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 33 );
// Add it to the batch
pstmt.addBatch();

// Set the variables
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "Pawan" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 31 );
// Add it to the batch
pstmt.addBatch();

//add more batches
.
.
.
.
//Create an int[] to hold returned values
int[] count = stmt.executeBatch();

//Explicitly commit statements to apply changes
conn.commit();

Для лучшего понимания давайте изучим Batching — Example Code .