English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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()
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.
esta es la secuencia de pasos típica para usar lotes con objetos PrepareStatement-
crear una sentencia SQL usando marcadores de posición.
use cualquier método PrepareStatement() para crear el objeto PrepareStatement.
usar setAutoCommit () para establecer auto-commit se establece en false.
Añadir lo más posible a la cola de procesamiento de lotes usando el método addBatch () del objeto de sentencia creado
Ejecutar todos los SQL语句 usando el método executeBatch () del objeto de sentencia creado
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.