Buscar..


Introducción

El procesamiento por lotes de instrucciones es ejecutar varias declaraciones como una unidad (con una declaración java.sql.Statement normal) o como una sola instrucción con varios conjuntos de valores de parámetros (con una declaración java.sql.PreparedStatement ).

Observaciones

El procesamiento por lotes de instrucciones permite que un programa recopile declaraciones relacionadas, o en el caso de conjuntos de valores de parámetros relacionados con declaraciones preparadas, y los envíe al servidor de la base de datos como una sola ejecución.

Los beneficios del procesamiento por lotes de declaraciones pueden incluir un rendimiento mejorado. Si y cómo se logran estos beneficios de rendimiento depende del controlador y el soporte de la base de datos, pero incluyen:

  • Enviar todas las declaraciones (o todos los conjuntos de valores) en un comando
  • Reescriba las declaraciones para que puedan ejecutarse como una sola declaración

Inserción de lotes utilizando PreparedStatement

La ejecución por lotes utilizando java.sql.PreparedStatement permite ejecutar una sola declaración DML con múltiples conjuntos de valores para sus parámetros.

Este ejemplo muestra cómo preparar una declaración de inserción y usarla para insertar varias filas en un lote.

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 

Ejecución por lotes mediante sentencia

La ejecución por lotes utilizando java.sql.Statement permite ejecutar varias declaraciones DML ( update , insert , delete ) a la vez. Esto se logra creando un solo objeto de declaración, agregando las instrucciones para ejecutar y luego ejecutar el lote como uno solo.

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(); devolverá int[] para retener los valores devueltos, puede ejecutar su lote de esta manera:

int[] stmExc = statement.executeBatch();//executing the batch 


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow