Artículos
Java

JDBC SQLWarning

30/Oct/2016

Dentro de los programas que acceden a las bases de datos con Java JDBC tenemos errores representados por SQLException y alertas representadas por JDBC SQLWarning.

Una alerta JDBC SQLWarning representa una información sobre algo que no ha ocurrido de forma esperada, pero que no ha sido un impedimento para ejecutar la acción que se había realizado.

Un ejemplo, y el que vamos a desarrollar aquí, es cuando insertamos campos de texto de un tamaño mayor al que se esperaba y se produce un truncado. En el artículo Truncar campos SQL explica cómo realizar esto.

En este caso la alerta genera información indicando que se insertó la información, pero que se tuvo que truncar.

Preparar la tabla

Vamos a crear una tabla con dos campos, el primero será un campo entero TINYINT que no podrá ser nulo y el segundo será un campo de 4 caracteres.

stmt = con.prepareStatement("CREATE TABLE t1 (a TINYINT NOT NULL, b CHAR(4))");  
stmt.execute(); 
stmt.close();

Realizar la inserción

Ahora vamos a realizar una inserción de 3 tuplas, las cuales fallarán cada una de una forma diferente. Bien porque el tamaño es superior, o porque es un valor nulo o en un número entero más grande de lo que se puede insertar.

stmt = con.prepareStatement("INSERT INTO t1 VALUES(10,'mysql'), (NULL,'test'), (300,'xyz')");
stmt.execute();

Evaluar la alerta

Ahora pasamos a capturar las alertas. Para ello tenemos que manipular la clase SQLWarning la cual es una subclase de SQLException

Sobre el PreparedStatement podemos obtener las alertas que se produzcan mediante el método .getWarnings(). Este método devuelve una lista de alertas las cuales podemos recuperar medainte el método .getNextWarning()

SQLWarning warning = stmt.getWarnings();
while (warning != null) {
  System.out.println("Warning");
  System.out.println("Message: " + warning.getMessage());
  System.out.println("SQLState: " + warning.getSQLState());
  System.out.print("Vendor error code: " + warning.getErrorCode());
  System.out.println("");
  warning = warning.getNextWarning();
}
stmt.close();

Vemos que los métodos de la clase SQLWarning son los mismos que los de SQLException y por lo tanto podemos ver el mensaje de error o código SQL asociado.

En este caso por consola podremos ver las alertas que tiene el INSERT que hemos hecho.

Warning
Message: Data truncated for column ‘b’ at row 1
SQLState: 01000
Vendor error code: 1265
Warning
Message: Column ‘a’ cannot be null
SQLState: HY000
Vendor error code: 1048
Warning
Message: Out of range value for column ‘a’ at row 3
SQLState: 01000
Vendor error code: 1264

Espero que os haya resultado útil el ejemplo de cómo capturar un JDBC SQLWarning

Código Fuente

Descárgate el código fuente de JDBC SQLWarning
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star

Vídeos sobre Java

Disfruta también de nuestros artículos sobre Java en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Java

¿Te atreves a probar tus habilidades y conocimiento en Java con nuestro test?

Test Java
Suscribir
Notificar de
guest
0 Comentarios
Opiniones integradas
Ver todos los comentarios