jdbc
Выставление заявлений
Поиск…
Вступление
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