Traitement par lots – Batch Processing | JDBC – Java
Le traitement par lots vous permet de regrouper des instructions SQL associées dans un lot et de les soumettre en un seul appel à la base de données.
Lorsque vous envoyez plusieurs instructions SQL à la base de données à la fois, vous réduisez le volume de communication, améliorant ainsi les performances.
Les pilotes JDBC ne sont pas requis pour prendre en charge cette fonctionnalité. Vous devez utiliser la méthode DatabaseMetaData.supportsBatchUpdates() pour déterminer si la base de données cible prend en charge le traitement par lots. La méthode renvoie TRUE si votre pilote JDBC prend en charge cette fonctionnalité.
La méthode addBatch() de Statement, PreparedStatement et CallableStatement est utilisée pour ajouter des instructions individuelles au lot. Le executeBatch() est utilisé pour démarrer l’exécution de toutes les instructions regroupées.
ExecuteBatch() renvoie un tableau des entiers, et chaque élément du tableau représente le nombre de mises à jour.
Comme vous pouvez ajouter des instructions à un lot pour un traitement, vous pouvez les supprimer avec la méthode clearBatch(). Cette méthode supprime toutes les instructions que vous avez ajoutées avec la méthode addBatch(). Cependant, vous ne pouvez pas choisir de manière sélective l’instruction à supprimer.
Méthodes de l’interface Statement
Les méthodes requises pour le traitement par lots sont indiquées ci-dessous:
void addBatch(String query) | Il ajoute une requête SQL au lot. |
int[] executeBatch() | Il exécute le lot de requêtes. |
Batching avec un objet Statement
Voici une séquence d’étapes pour utiliser le traitement par lots avec un objet Statement:
- Créez un objet Statement à l’aide des méthodes createStatement().
- Définissez la validation automatique(auto-commit) sur false à l’aide de setAutoCommit().
- Ajoutez autant d’instructions SQL que vous le souhaitez dans le lot à l’aide de la méthode addBatch() sur l’objet Statement créé.
- Exécutez toutes les instructions SQL à l’aide de la méthode executeBatch() sur l’objet Statement créé.
- Enfin, validez toutes les modifications à l’aide de la méthode commit().
Exemple: En utilisant Statement
// Créer un objet Statement Statement stmt = conn.createStatement(); // Définissez la validation automatique(auto-commit) sur false conn.setAutoCommit(false); // Créer une instruction SQL String query = "INSERT INTO Emp (id, nom) VALUES(101,'Bob')"; // Ajoutez l'instruction SQL ci-dessus dans le lot. stmt.addBatch(query); // Créer une autre instruction SQL String query = "INSERT INTO Emp (id, nom) VALUES(102,'Alex')"; // Ajoutez l'instruction SQL ci-dessus dans le lot. stmt.addBatch(query); // Créer une autre instruction SQL String query = "DELETE FROM Emp WHERE id = 101"; // Ajoutez l'instruction SQL ci-dessus dans le lot. stmt.addBatch(query); // Créez un tableau d'entier pour contenir les valeurs renvoyées int[] count = stmt.executeBatch(); //Valider explicitement les instructions pour appliquer les modifications conn.commit();
Exemple: En utilisant PreparedStatement
// Créer une instruction SQL String SQL = "INSERT INTO Emp (id, nom) VALUES(?, ?)"; // Créer un objet PrepareStatement PreparedStatemen pr = conn.prepareStatement(SQL); //Définissez la validation automatique(auto-commit) sur false conn.setAutoCommit(false); // Définissez les variables pr.setInt(1, 101); pr.setString(2, "Alex"); // Ajoutez-le au lot pr.addBatch(); // Définissez les variables pr.setInt(1, 102); pr.setString(2, "Thomas"); // Ajoutez-le au lot pr.addBatch(); //ajouter plus de lots ... // Créez un tableau d'entier pour contenir les valeurs renvoyées int[] count = stmt.executeBatch(); //Valider explicitement les instructions pour appliquer les modifications conn.commit();
Si vous jeter un coup d’œil sur la table ’emp’, deux enregistrements ont été ajoutés.