jdbc
Relevé de compte
Recherche…
Introduction
java.sql.Statement
normal) ou à une seule instruction comportant plusieurs ensembles de valeurs de paramètres (avec un java.sql.PreparedStatement
).
Remarques
Le traitement par lots d'instructions permet à un programme de collecter des instructions associées ou, dans le cas d'instructions préparées, de définir des ensembles de valeurs de paramètres et de les envoyer au serveur de base de données en tant qu'exécution unique.
Les avantages du traitement par lots peuvent inclure des performances améliorées. Si et comment ces avantages de performance sont atteints dépend de la prise en charge du pilote et de la base de données, mais ils incluent:
- Envoi de toutes les instructions (ou de tous les ensembles de valeurs) en une seule commande
- Réécrire la ou les instructions pour qu'elles puissent être exécutées comme une seule déclaration
Insertion par lots à l'aide de PreparedStatement
L'exécution par lots à l'aide de java.sql.PreparedStatement
vous permet d'exécuter une seule instruction DML avec plusieurs jeux de valeurs pour ses paramètres.
Cet exemple montre comment préparer une instruction d'insertion et l'utiliser pour insérer plusieurs lignes dans un lot.
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
Exécution par lots à l'aide de l'instruction
L'exécution par lots à l'aide de java.sql.Statement
vous permet d'exécuter plusieurs instructions DML ( update
, insert
, delete
) en même temps. Ceci est réalisé en créant un objet d'instruction unique, en ajoutant les instructions à exécuter, puis en exécutant le lot comme un seul.
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
Remarque:
statement.executeBatch();
retournera int[]
pour contenir les valeurs renvoyées, vous pouvez exécuter votre lot comme ceci:
int[] stmExc = statement.executeBatch();//executing the batch