viernes, 19 de abril de 2013

Uso de JDBC. Sus limitaciones.

En esta entrada veremos de forma práctica algunas de las cosas que comentábamos en una de las entradas iniciales del blog relacionadas con el acceso a dato.

Estaremos haciendo lo siguiente:

  • Usaremos una BD en postgresql para almacenar información y consumirla.
  • Usaremos un driver de postgresql para conectarnos a esta BD desde JAVA.
  • Usaremos JDBC para conectarnos a la BD y ejecutar diferentes consultas contra la BD.

Empecemos:

Paso 1:


Lo primero es tener creada una BD en postgresql, yo uso pgadmin con editor. Estoy usando una versión no tan nueva de postgresql pero ustedes pueden usar la versión 9.x sin problema.

Mi BD es esta:


Y mis tablas son las siguientes:





Como ven un libro tiene una clave foránea de la editora que publica el libro y un capitulo tiene una clave foránea del libro al que pertenece. Una editora puede tener muchos libros y un libro puede tener muchos capítulos.

Paso 2: vamos a irnos al Eclipse, uso la versión JUNO, y comenzar a tirar el código para conectarnos a la BD y poder ejecutar consultas.

En este caso creamos un proyecto java bien básico y ejecutaremos en una consola nuestras clases.

Primero crearemos una clase para conectarnos a la BD. Como esta entrada es más educativa  que productiva nos saltaremos algunas consideraciones a tener en cuenta si esto fuera parte de un proyecto. La clase de conexión es la siguiente:


Esta clase será llamada desde otras clases y al método conectar cada vez que necesitemos de un objeto de tipo Connection para acceder a la BD, ya veremos cómo.

Veamos ahora las clases  POJO que hemos creado. Entiendan por POJO = Plain Old Java Objects

Paso 3: creamos las clases entidades que se mapearan contra nuestras tablas de la BD.

La primera clase es para la entidad Editora.


La segunda clase es para la entidad libro con sus setters y getter para acceder a los atributos privados, oculto estos métodos para poder ver toda la clase:


Y por último la clase capítulo, igual a las demás:


Paso 4: creamos algunas consultas simples.

Comencemos entonces viendo cómo usar el objeto de conexión y ejecutar consultas simples sobre la BD. Lo que veremos ahora es un método que obtiene el objeto conexión y con el prepara una consulta para obtener todos los libros de una editora, codificamos el código de la editora pero bien lo pueden pasar por parámetro al método.


En este caso los comentarios van dentro y el método es static para poder llamarlo sin instanciar a la clase que lo contiene, en este caso desde el Main de la clase.

Aquí pueden ver la ejecución de este método en el eclipse desde la consola.


Ahora veremos otro ejemplo donde actualizamos el nombre de un libro. Primero veamos los datos de los libros en la BD.


Luego de ejecutar este método:


Veremos lo siguiente:


Como ven en la segunda impresión ya el título "más allá de las estrellas" no aparece y en su lugar tenemos a "por quién doblan las campanas".


Paso 5: comenzamos el trabajo de hacer un ORM, algo que nos mapee de nuestras tablas de la BD a nuestras clases entidades del negocio.

Para finalizar esta entrada veremos cómo podemos a partir del trabajo con JDBC crear las entidades con los datos obtenidos de la BD.



Una vez creados estos objetos de las entidades los podemos usar para obtener la información de ellos y no de las consultas directamente de la BD. ¿Cuál es el problema con este enfoque?

El problema es que esto es el principio de cómo funciona un ORM que era algo de lo que hablábamos en una de las primeras entradas. Ver como mapear las tablas de la BD con las entidades del negocio y es algo de lo que hemos hecho aquí, pero aún nos queda mucho código por escribir y repetir y además es un código muy atado al diseño de la BD, debemos iterar manualmente sobre muchos resultados y es costoso en términos de rendimiento la preparación de las consultas. Es por eso que en proyectos productivos rara vez se usa JDBC y si se recurre a Hibernate como el mejor ORM para el trabajo con BD relacionales. Ya lo estaremos viendo en acción en posteriores entradas.


¿Te ha gustado este Post? Compártelo con tus amigos.

1 comentario:

IconIconIcon