jdbc
Declaración de lotes
Buscar..
Introducció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