Recherche…


Introduction

Le traitement par lots d'instructions consiste à exécuter plusieurs instructions sous la forme d'une unité (avec un 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 


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow