Realizar operaciones por lotes

Con el fin de aumentar el rendimiento al realizar varias actualizaciones en una base de datos de SQL Server, el controlador JDBC de Microsoft SQL Server 2005 ofrece la posibilidad de enviar varias actualizaciones como una sola unidad de trabajo, denominada también lote.

Las clases SQLServerStatement, SQLServerPreparedStatement y SQLServerCallableStatement se pueden usar para enviar actualizaciones por lotes. El método addBatch se usa para agregar un comando. El método clearBatch se usa para borrar la lista de comandos. El método executeBatch se usa para enviar todos los comandos para su procesamiento. Tan sólo las instrucciones de lenguaje de definición de datos (DDL) y lenguaje de manipulación de datos (DML) que devuelven un recuento de actualizaciones sencillo se pueden ejecutar como parte de un lote.

El método executeBatch devuelve una matriz de valores int que se corresponde con el recuento de actualizaciones de cada comando. Si se produce un error en uno de los comandos, se genera BatchUpdateException y debe usar el método getUpdateCounts de la clase BatchUpdateException para recuperar la matriz de recuento de actualizaciones. Si un comando produce un error, el controlador sigue procesando los comandos restantes. No obstante, si un comando contiene un error de sintaxis, las instrucciones del lote generan un error.

Nota

Si no necesita usar recuentos de actualizaciones, puede ejecutar primero la instrucción SET NOCOUNT ON para SQL Server. De este modo, se reduce el tráfico de red y, además, se aumenta el rendimiento de la aplicación.

A modo de ejemplo, cree la siguiente tabla en la base de datos de ejemplo AdventureWorks de SQL Server 2005:

CREATE TABLE TestTable 
   (Col1 int IDENTITY, 
    Col2 varchar(50), 
    Col3 int);

En el siguiente ejemplo, se pasa una conexión abierta a la base de datos de ejemplo AdventureWorks a la función, se usa el método addBatch para crear las instrucciones que se van a ejecutar y se llama al método executeBatch para enviar el lote a la base de datos.

public static void executeBatchUpdate(Connection con) {
   try {
      Statement stmt = con.createStatement();
      stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('X', 100)");
      stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Y', 200)");
      stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Z', 300)");
      int[] updateCounts = stmt.executeBatch();
      stmt.close();
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

Vea también

Otros recursos

Usar instrucciones con el controlador JDBC