JDBC - Traitement par lots

Le traitement par lots vous permet de regrouper les 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 la charge de communication, améliorant ainsi les performances.

  • Les pilotes JDBC ne sont pas nécessaires 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 des mises à jour par lots. La méthode renvoie true si votre pilote JDBC prend en charge cette fonctionnalité.

  • le addBatch()La méthode Statement, PreparedStatement et CallableStatement est utilisée pour ajouter des instructions individuelles au lot. leexecuteBatch() permet de démarrer l'exécution de toutes les instructions regroupées.

  • le executeBatch() renvoie un tableau d'entiers et chaque élément du tableau représente le nombre de mises à jour pour l'instruction de mise à jour respective.

  • Tout comme vous pouvez ajouter des instructions à un lot pour traitement, vous pouvez les supprimer avec le clearBatch()méthode. 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.

Traitement par lots avec un objet Statement

Voici une séquence typique 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 l'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 instruction créé.

  • Exécutez toutes les instructions SQL à l'aide de la méthode executeBatch () sur l'objet instruction créé.

  • Enfin, validez toutes les modifications en utilisant la méthode commit () .

Exemple

L'extrait de code suivant fournit un exemple de mise à jour par lots à l'aide de l'objet Statement -

// Create statement object
Statement stmt = conn.createStatement();

// Set auto-commit to false
conn.setAutoCommit(false);

// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(200,'Zia', 'Ali', 30)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);

// Create one more SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(201,'Raj', 'Kumar', 35)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);

// Create one more SQL statement
String SQL = "UPDATE Employees SET age = 35 " +
             "WHERE id = 100";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);

// Create an int[] to hold returned values
int[] count = stmt.executeBatch();

//Explicitly commit statements to apply changes
conn.commit();

Pour une meilleure compréhension, étudions le Batching - Exemple de code .

Traitement par lots avec l'objet PrepareStatement

Voici une séquence typique d'étapes pour utiliser le traitement par lots avec l'objet PrepareStatement -

  1. Créez des instructions SQL avec des espaces réservés.

  2. Créez un objet PrepareStatement en utilisant l'une des méthodes prepareStatement () .

  3. Définissez l'auto-commit sur false à l'aide de setAutoCommit () .

  4. Ajoutez autant d'instructions SQL que vous le souhaitez dans le lot à l'aide de la méthode addBatch () sur l'objet instruction créé.

  5. Exécutez toutes les instructions SQL à l'aide de la méthode executeBatch () sur l'objet instruction créé.

  6. Enfin, validez toutes les modifications en utilisant la méthode commit () .

L'extrait de code suivant fournit un exemple de mise à jour par lots à l'aide de l'objet PrepareStatement -

// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
             "VALUES(?, ?, ?, ?)";

// Create PrepareStatement object
PreparedStatemen pstmt = conn.prepareStatement(SQL);

//Set auto-commit to false
conn.setAutoCommit(false);

// Set the variables
pstmt.setInt( 1, 400 );
pstmt.setString( 2, "Pappu" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 33 );
// Add it to the batch
pstmt.addBatch();

// Set the variables
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "Pawan" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 31 );
// Add it to the batch
pstmt.addBatch();

//add more batches
.
.
.
.
//Create an int[] to hold returned values
int[] count = stmt.executeBatch();

//Explicitly commit statements to apply changes
conn.commit();

Pour une meilleure compréhension, étudions le Batching - Exemple de code .