JDBC SQLWarning

30/Oct/2016 Java ,

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.

  1. stmt = con.prepareStatement("CREATE TABLE t1 (a TINYINT NOT NULL, b CHAR(4))");
  2. stmt.execute();
  3. 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.

  1. stmt = con.prepareStatement("INSERT INTO t1 VALUES(10,'mysql'), (NULL,'test'), (300,'xyz')");
  2. 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()

  1. SQLWarning warning = stmt.getWarnings();
  2. while (warning != null) {
  3. System.out.println("Warning");
  4. System.out.println("Message: " + warning.getMessage());
  5. System.out.println("SQLState: " + warning.getSQLState());
  6. System.out.print("Vendor error code: " + warning.getErrorCode());
  7. System.out.println("");
  8. warning = warning.getNextWarning();
  9. }
  10. 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

Vídeos sobre Java


Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D