jdbc
Dozowanie zestawień
Szukaj…
Wprowadzenie
java.sql.Statement
) lub pojedynczej instrukcji z wieloma zestawami wartości parametrów (z java.sql.PreparedStatement
).
Uwagi
Grupowanie instrukcji pozwala programowi zbierać powiązane instrukcje lub, w przypadku przygotowanych instrukcji, zestawy wartości parametrów i wysyłać je do serwera bazy danych jako pojedyncze wykonanie.
Korzyści z grupowania zestawień mogą obejmować lepszą wydajność. To, czy i w jaki sposób osiąga się te korzyści, zależy od sterownika i obsługi bazy danych, ale obejmują one:
- Wysyłanie wszystkich instrukcji (lub wszystkich zestawów wartości) w jednym poleceniu
- Przepisywanie instrukcji, aby można je było wykonać jak jedną dużą instrukcję
Wstawianie partii za pomocą PreparedStatement
Wykonywanie wsadowe przy użyciu java.sql.PreparedStatement
umożliwia wykonanie pojedynczej instrukcji DML z wieloma zestawami wartości dla jej parametrów.
Ten przykład pokazuje, jak przygotować instrukcję insert i użyć jej do wstawienia wielu wierszy we wsadzie.
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
Wykonanie wsadowe za pomocą instrukcji
Wykonanie wsadowe przy użyciu java.sql.Statement
umożliwia wykonanie wielu instrukcji DML ( update
, insert
, delete
) jednocześnie. Osiąga się to poprzez utworzenie pojedynczego obiektu instrukcji, dodanie instrukcji do wykonania, a następnie wykonanie partii jako jednej.
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
Uwaga:
statement.executeBatch();
zwróci int[]
do przechowywania zwróconych wartości, możesz wykonać swoją partię w następujący sposób:
int[] stmExc = statement.executeBatch();//executing the batch