Y aún estoy de exámenes, hasta el viernes, que estaré por fin libre de este gran peso, y esperemos, que con resultados satisfactorios.

Mientras tanto, para no tener abandonado el blog, ahi va mi pequeña aportación semanal.
Normalmente, en toda base de datos de una aplicación que se precie, suele tener algún campo del tipo Date. Pues Mysql, por norma general, si el campo no puede ser NULL, le asigna como valor por defecto ‘0000-00-00’, un valor que puede parecer inocente en un principio, pero si ya tenemos una aplicación Java funcionando o de una nueva, al intentar recuperarla del ResultSet, obtendremos una bonita excepción del tipo :


java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date

Aunque la primera solución que se nos puede pasar por la cabeza, después de las ganas de querer apalear la máquina virtual de Java, sería modificar la base de datos y cambiar todos los registros cuyo valor sea ‘0000-00-00’ por un NULL o si no podemos, por la fecha más antigua posible (Esa de 1970 que bla bla bla).  Ahora bién, esto puede ser bastante engorroso, aparte de que posiblemente nos pueda causar problemas posteriores con otras zonas de la aplicación. Pero por suerte, tenemos una solución bastante más asequible, rápida y escalable. Es tan sencillo, como pasarle como parámentro al conector de Mysql para java lo siguiente : “zeroDateTimeBehavior=convertToNull”, quedando por ejemplo, la línea de la conexión algo así:

"jdbc:mysql://localhost:3306/pagos?user=root&password=root&zeroDateTimeBehavior=convertToNull";

De esta forma, automaticamente, el conector, cada vez que recupere un registro del tipo fecha que sea cero, lo que hará será darle al ResultSet un null, solucionando así gran parte de nuestros problemas.

Si quereis aprender más sobre toda la funcionalidad del conector de Mysql, siempre podeis dirigiros a la documentación oficial del conector.

« »