English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Procesamiento por lotes de JDBC (Batch)

El procesamiento por lotes le permite agrupar sentencias SQL relacionadas en un lote y presentarlas para su ejecución en una sola llamada a la base de datos.

Al enviar múltiples sentencias SQL al mismo tiempo a la base de datos, se puede reducir el costo de comunicación, lo que mejora el rendimiento.

  • El controlador JDBC no necesita admitir esta característica. Debe usar el método DatabaseMetaData.supportsBatchUpdates () para determinar si la base de datos objetivo admite el procesamiento de actualizaciones en lote. Si el controlador JDBC admite esta característica,该方法 devuelve true.

  • Los métodos addBatch () de Statement, PreparedStatement y CallableStatement se utilizan para agregar una sola instrucción al lote. executeBatch () se utiliza para comenzar a ejecutar todas las instrucciones combinadas.

  • executeBatch() devuelve un array de enteros, donde cada elemento representa el recuento de actualizaciones de la sentencia update correspondiente.

  • como puede agregar instrucciones al lote para procesarlas, también puede usar el método clearBatch () para eliminarlas. Este método elimina todas las instrucciones que se han agregado con el método addBatch (). Sin embargo, no se puede seleccionar la instrucción que se desea eliminar.

usar el objeto de instrucción para lotes

esta es la secuencia de pasos típica para usar lotes con objetos Statement-

  • usar estos doscreateStatement()método para crear el objeto Statement.

  • usar setAutoCommit () para establecer auto-commit se establece en false.

  • Utiliza el método addBatch() en el objeto de instrucción creado para agregar una cantidad arbitraria de sentencias SQL al lote.

  • Ejecutar todos los SQL语句 usando el método executeBatch () del objeto de sentencia creado

  • Finalmente, usarcommit()El método commit()

Ejemplo

El siguiente fragmento de código proporciona un ejemplo de actualización en lote utilizando el objeto Statement-

// Crear objeto de instrucción
Statement stmt = conn.createStatement();
// Establecer el commit automático en false
conn.setAutoCommit(false);
// Crear sentencia SQL
String SQL = "INSERT INTO Employees (id, first, last, age) "; +
             "VALUES(200, 'Zia', 'Ali', 30)";
// agregar la sentencia SQL superior al lote.
stmt.addBatch(SQL);
// crea otra sentencia SQL
String SQL = "INSERT INTO Employees (id, first, last, age) "; +
             "VALUES(201,'Raj', 'Kumar', 35)";
// agregar la sentencia SQL superior al lote.
stmt.addBatch(SQL);
// crea otra sentencia SQL
String SQL = "UPDATE Employees SET age = 35 " +
             "WHERE id = 100";
// agregar la sentencia SQL superior al lote.
stmt.addBatch(SQL);
// Crear un int[] para guardar los valores devueltos
int[] count = stmt.executeBatch();
//Enviar claramente la sentencia para aplicar los cambios
conn.commit();

Para entender mejor, estudiemosEjemplo de código de procesamiento por lotes.

usar el objeto PrepareStatement para lotes

esta es la secuencia de pasos típica para usar lotes con objetos PrepareStatement-

  1. crear una sentencia SQL usando marcadores de posición.

  2. use cualquier método PrepareStatement() para crear el objeto PrepareStatement.

  3. usar setAutoCommit () para establecer auto-commit se establece en false.

  4. Añadir lo más posible a la cola de procesamiento de lotes usando el método addBatch () del objeto de sentencia creado

  5. Ejecutar todos los SQL语句 usando el método executeBatch () del objeto de sentencia creado

  6. Finalmente, usarcommit()El método commit()

El siguiente fragmento de código proporciona un ejemplo de actualización por lotes utilizando el objeto PreparedStatement-

// Crear sentencia SQL
String SQL = "INSERT INTO Employees (id, first, last, age) "; +
             "VALUES(?, ?, ?, ?)";
// Crear objeto PreparedStatement
PreparedStatemen pstmt = conn.prepareStatement(SQL);
//Establecer el commit automático en false
conn.setAutoCommit(false);
// Establecer variables
pstmt.setInt( 1, 400);
pstmt.setString( 2, "Pappu");
pstmt.setString( 3, "Singh");
pstmt.setInt( 4, 33 );
// Añádalo al lote
pstmt.addBatch();
// Establecer variables
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "Pawan");
pstmt.setString( 3, "Singh");
pstmt.setInt( 4, 31 );
// Añádalo al lote
pstmt.addBatch();
//Agregar más lotes
.
.
.
.
//Crear un int[] para guardar los valores devueltos
int[] count = stmt.executeBatch();
//Enviar claramente la sentencia para aplicar los cambios
conn.commit();

Para entender mejor, estudiemosEjemplo de código de procesamiento por lotes.