jdbc
Dichiarazione di batching
Ricerca…
introduzione
java.sql.Statement
normale) o una singola istruzione con più set di valori di parametro (con un java.sql.PreparedStatement
).
Osservazioni
Il dosaggio delle istruzioni consente a un programma di raccogliere istruzioni correlate o, nel caso di istruzioni preparate, le serie di valori dei parametri e di inviarle al server di database come esecuzione singola.
I vantaggi del batching delle istruzioni possono includere prestazioni migliorate. Se e come questi benefici prestazionali vengono raggiunti dipende dal supporto del driver e del database, ma includono:
- Invio di tutte le istruzioni (o di tutti i set di valori) in un comando
- Riscrivere le dichiarazioni in modo che possano essere eseguite come una grande affermazione
Inserimento batch utilizzando PreparedStatement
L'esecuzione batch utilizzando java.sql.PreparedStatement
consente di eseguire una singola istruzione DML con più set di valori per i suoi parametri.
Questo esempio mostra come preparare un'istruzione di inserimento e utilizzarla per inserire più righe in un batch.
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
Esecuzione batch utilizzando Statement
L'esecuzione batch mediante java.sql.Statement
consente di eseguire più istruzioni DML ( update
, insert
, delete
) contemporaneamente. Ciò si ottiene creando un singolo oggetto statement, aggiungendo le istruzioni da eseguire e quindi eseguendo il batch come uno.
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
Nota:
statement.executeBatch();
restituirà int[]
per contenere i valori restituiti, è possibile eseguire il batch in questo modo:
int[] stmExc = statement.executeBatch();//executing the batch