Ir al contenido

Ejemplo BatchUpdateException

Ya hemos visto como podemos insertar registros en una tabla mediante un BatchUpdate. Pero cual sería un ejemplo BatchUpdateException cuando ejecutemos estas sentencias. Veamos como simularlo.

Lo primero que haremos será crear una tabla que permita insertar números del 0 al 9. Además sobre esta tabla crearemos un índice para que no se puedan repetir los números. De esta forma cuando intentemos insertar un número repetido generará un error, error que controlaremos mediante la BatchUpdateException.

La tabla la creamos mediante una sentencia SQL CREATE TABLE.

CREATE TABLE temporal (
numero INT
);

Y su respectivo índice con la sentencia SQL CREATE UNIQUE INDEX.

CREATE UNIQUE INDEX idx_temporal ON temporal(numero);

Ahora vamos a realizar una inserción en batch de números. En esta lista de números habrá números repetidos para que falle la inserción y se genere la BatchUpdateException.

int[] valores = {1,2,2,3,1,4,1,2};
PreparedStatement carga = con.prepareStatement("INSERT INTO temporal VALUES (?)");
for (int x=0; x<valores.length; x++) {
carga.setInt(1, valores[x]);
carga.addBatch();
}
carga.executeBatch();

Cuando lanzamos el método .executeBatch() se lanzarán todas las inserciones, cuando se llegue a los números repetidos se irá lanzando la BatchUpdateException, si bien, el resto de números serán insertados.

Para controlar la BatchUpdateException utilizamos el siguiente código:

} catch (BatchUpdateException bue) {
int[] errores = bue.getUpdateCounts();
System.out.println("--Errores en el Batch--\n");
for (int x=0; x<errores.length; x++) {
if (errores[x] < 0) {
System.out.print("Error insertando el valor " + valores[x] +
" de la posición " + x + "\n");
}
}
}

Vemos que el método .getUpdateCounts() nos devuelve un array de enteros que representan cada uno de los INSERT que se han ejecutado. Los valores mayores de 0 representarán aquellos que se han insertado correctamente, y los que tengan un valor menor de 0 serán aquellos que hayan fallado.

Es por ello que recorriendo el array podemos listar aquellas sentencias que fallaron. Obteniendo por consola la siguiente salida:

Ventana de terminal
Error insertando el valor 2 de la posición 2
Error insertando el valor 1 de la posición 4
Error insertando el valor 1 de la posición 6
Error insertando el valor 2 de la posición 7

Espero que este ejemplo BatchUpdateException haya servido para ver como se maneja dicha excepción.

Foto de Víctor Cuervo

Víctor Cuervo

Programador, Arquitecto IT, álter ego de Línea de Código, amante de las tecnologías, generador de conocimiento y facilitador del aprendizaje.

Descarga el código de Ejemplo BatchUpdateException

Ejemplo BatchUpdateException que muestra cómo manejar errores al insertar números repetidos en una tabla SQL.

Descargar código
Pon a prueba tu conocimiento
JDBC en Java

¿Qué clase se utiliza para conectarse a una base de datos en JDBC?

  • A DatabaseConnection
  • B DriverManager
  • C ConnectionFactory
  • D DBConnect