Поиск…


Вступление

java.sql.Statement представляет собой либо выполнение нескольких операторов как одно целое (с нормальным java.sql.Statement ), либо один оператор с несколькими наборами значений параметров (с java.sql.PreparedStatement ).

замечания

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

Преимущества пакетной обработки заявлений могут включать улучшенную производительность. Если и как эти преимущества производительности будут достигнуты, зависит от поддержки драйверов и баз данных, но они включают:

  • Отправка всех операторов (или всех наборов значений) одной командой
  • Переписывая оператор (ы), чтобы они могли выполняться как одно большое утверждение

Пакетная вставка с использованием PreparedStatement

Пакетное выполнение с использованием java.sql.PreparedStatement позволяет выполнить один оператор DML с несколькими наборами значений для его параметров.

В этом примере показано, как подготовить оператор insert и использовать его для вставки нескольких строк в пакет.

Connection connection = ...; // obtained earlier
connection.setAutoCommit(false); // disabling autoCommit is recommend for batching
int orderId = ...; // The primary key of inserting and order
List<OrderItem> orderItems = ...; // Order item data

try (PreparedStatement insert = connection.prepareStatement(
        "INSERT INTO orderlines(orderid, itemid, quantity) VALUES (?, ?, ?)")) {
    // Add the order item data to the batch
    for (OrderItem orderItem : orderItems) {
        insert.setInt(1, orderId);
        insert.setInt(2, orderItem.getItemId());
        insert.setInt(3, orderItem.getQuantity());
        insert.addBatch();
    }

    insert.executeBatch();//executing the batch 
}

connection.commit();//commit statements to apply changes 

Пакетное выполнение с использованием Statement

Пакетное выполнение с использованием java.sql.Statement позволяет выполнять сразу несколько операторов DML ( update , insert , delete ). Это достигается путем создания единого объекта-оператора, добавления операторов для выполнения, а затем выполнения пакета как одного.

Connection connection = ...; // obtained earlier
connection.setAutoCommit(false); // disabling autocommit is recommended for batch execution

try (Statement statement = connection.createStatement()) {
    statement.addBatch("INSERT INTO users (id, username) VALUES (2, 'anna')");
    statement.addBatch("INSERT INTO userrole(userid, rolename) VALUES (2, 'admin')");
    
    statement.executeBatch();//executing the batch 
}

connection.commit();//commit statements to apply changes 

Замечания:

statement.executeBatch(); вернет int[] чтобы сохранить возвращаемые значения, вы можете выполнить свою партию следующим образом:

int[] stmExc = statement.executeBatch();//executing the batch 


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow