Introducción a Java (JDBC) y MySQL (I)
Esta introducción está dirigida a gente que ya es familiar con el uso de Linux, ya sabe programar en Java y sabe un mínimo de SQL.
Intentaré mostrar cómo construir una aplicación en Java que tira contra una base de datos MySQL desde cero.
Instalando el software necesario
Java
Debemos instalar el último Java Development Kit (JDK) disponible. En mi caso es el paquete openjdk-6-jdk (y todas sus dependencias obviamente). Luego instalamos el driver JDBC para MySQL, libmysql-java.
MySQL
Instalamos el paquete mysql-server, y recomiendo mysql-admin y mysql-navigator, ya que serán las herramientas que usaré para configurar MySQL y lanzar/probar las sentencias SQL, respectivamente. En la instalación de MySQL nos pedirá la contraseña del usuario root para MySQL. Ésta es una contraseña totalmente independiente del root de Linux.
Eclipse
Como entorno de desarrollo voy a optar por Eclipse. Se puede instalar desde el repositorio, pero yo prefiero bajármelo desde la web oficial. Lo descomprimimos en una carpeta y dentro tenemos el ejecutable eclipse, que si lo lanzamos tenemos Eclipse corriendo. Podemos arrastrar este ejecutable a la barra de menús de GNOME (o su gestor de escritorio favorito) para tenerlo como acceso directo.
Configurando MySQL
En Debian GNU/Linux con GNOME 2, el administrador de MySQL se encuentra en Applications/Programming/MySQL Administrator
Introducimos la contraseña y pa'dentro.
Es posible que el servidor no estuviera corriendo, con lo que obtendríamos un mensaje de error parecido a éste
En este caso tenemos que lanzarlo manualmente. Nos vamos a una consola y hacemos mysqld & como root.
# mysqld &
[1] 6798
root@soviet:/home/m0skit0# 110604 13:08:10 [Note] Plugin 'FEDERATED' is disabled.
110604 13:08:10 InnoDB: Started; log sequence number 0 44233
110604 13:08:10 [Note] Event Scheduler: Loaded 0 events
110604 13:08:10 [Note] mysqld: ready for connections.
Version: '5.1.49-3' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Debian)
Podemos cerrar el terminal. Ahora volvemos a lanzar MySQL Administrator y vamos para dentro. Aquí podemos comprobar que MySQL está corriendo ("Server is running"). En Service Control podemos pararlo/arrancarlo.
Cerramos el administrador y ahora lanzamos MySQL Query Browser, que en mi caso estaba justo debajo del MySQL Administrator en la entrada del menú.
La base de datos de ejemplo que voy a hacer va a ser para guardar mi colección de discos. Veamos cómo creamos una estructura de tablas para este objetivo.
Lo primero es crear un esquema para nuestra discografía. En la pestaña Schemata hacemos click derecho en la ventana y seleccionamos Create Schema, le ponemos el nombre discografia y OK. Ahora nos debería aparecer un esquema discografia. Le damos doble click para ponerlo activo.
Ahora vamos a añadir una tabla a este esquema. Hacemos click derecho y seleccionamos Create Table.
Esta tabla va a describir al artista, así que le ponemos el nombre ARTISTA. He (mal) pensado en guardar los siguientes datos sobre cada artista: Nombre, Fecha de formación, País de origen y Biografía. A esto hay que añadirle una clave primaria para la tabla, un identificador de artista, que llamaré ID_ARTISTA (para no caer en la originalidad). Primero añado esta columna como clave primaria.
Añado el nombre.
La fecha de formación.
El país de origen (en este caso sería mejor hacer una tabla de países y enlazar esta columna como clave externa a dicha tabla, pero voy a simplificar).
Y la biografía
Hacemos click en Apply changes, lo que nos mostrará el script SQL que se va a ejecutar, lo revisamos si queremos, pulsamos Execute y nos debería informar de que la tabla ha sido creada.
Luego nos creamos una tabla para los álbumes.
Y otra para las pistas.
Ahora vamos a modificar cada una de las tablas para añadirles claves externas (foreign keys - FKs). Esto es para evitar que por ejemplo para un Álbum se introduzca un ID de Artista que no existe. Para poder añadir FKs, primero es necesario modificar el motor de base de datos de todas las tablas. Para cada una de las 3 tablas, hacemos click derecho sobre ella -> Edit -> Table Options -> Storage Engine -> InnoDB. Aplicamos los cambios.
Ahora volvemos a editar la tabla ALBUM para añadirle una FK a ARTISTA, ya que ALBUM tiene una columna que referencia un ID_ARTISTA. Hacemos click en Foreign Keys y luego en el + verde que hay abajo a la izquierda. Añadimos la FK:
Para añadir una columna en la ventana de la derecha, se selecciona y se arrastra desde la lista de columnas que se encuentra arriba. La Foreign Column hay que añadirla a mano. No olvidéis pulsar Enter después de escribir ésta.
Procedimiento similar con la tabla PISTA:
Bueno, ya tenemos lista nuestra base de datos para discografías. Si le dáis un poco de vueltas veréis que se puede ampliar y mejorar, pero eso ya lo dejo a vuestra imaginación.
Ahora vamos a introducir algunos artistas y álbumes para hacer pruebas. Para este menester, voy a elegir el disco Road Games del señor Allan Holdsworth. Primero debemos insertar el artista, ya que de lo contrario no podríamos insertar el álbum al tener una referencia a un artista. Para esto hacemos doble click sobre la tabla ARTISTA y veremos que nos sale una sentencia SQL arriba
SELECT * FROM ARTISTA A LIMIT 0,1000
Presionamos Execute y nos debería quedar tal que así
Ahora hacemos click sobre Start Editing, introducimos los datos y hacemos click en Apply Changes. Tened en cuenta que no hace falta introducir el ID_ARTISTA, ya que MySQL se encarga de aumentarlo automáticamente. Lo mismo ocurre con el ID primario de las otras tablas.
Ahora el álbum.
Y las pistas
Ahora por ejemplo si yo quiero conocer la duración de la pista 3 del disco de 1983 de Allan Holdsworth:
SELECT PISTA.DURACION FROM PISTA, ARTISTA, ALBUM WHERE ARTISTA.NOMBRE = 'Allan Holdsworth' AND ARTISTA.ID_ARTISTA = ALBUM.ID_ARTISTA AND ALBUM.FECHA_LANZAMIENTO = '1983-00-00' AND PISTA.ID_ALBUM = ALBUM.ID_ALBUM AND PISTA.NUM_PISTA = 3
En la siguiente parte os contaré cómo conectar desde Java a nuestra base de datos. Hasta entonces, ¡sed buenos y políticamente activos!
Intentaré mostrar cómo construir una aplicación en Java que tira contra una base de datos MySQL desde cero.
Instalando el software necesario
Java
Debemos instalar el último Java Development Kit (JDK) disponible. En mi caso es el paquete openjdk-6-jdk (y todas sus dependencias obviamente). Luego instalamos el driver JDBC para MySQL, libmysql-java.
MySQL
Instalamos el paquete mysql-server, y recomiendo mysql-admin y mysql-navigator, ya que serán las herramientas que usaré para configurar MySQL y lanzar/probar las sentencias SQL, respectivamente. En la instalación de MySQL nos pedirá la contraseña del usuario root para MySQL. Ésta es una contraseña totalmente independiente del root de Linux.
Eclipse
Como entorno de desarrollo voy a optar por Eclipse. Se puede instalar desde el repositorio, pero yo prefiero bajármelo desde la web oficial. Lo descomprimimos en una carpeta y dentro tenemos el ejecutable eclipse, que si lo lanzamos tenemos Eclipse corriendo. Podemos arrastrar este ejecutable a la barra de menús de GNOME (o su gestor de escritorio favorito) para tenerlo como acceso directo.
Configurando MySQL
En Debian GNU/Linux con GNOME 2, el administrador de MySQL se encuentra en Applications/Programming/MySQL Administrator
Introducimos la contraseña y pa'dentro.
Es posible que el servidor no estuviera corriendo, con lo que obtendríamos un mensaje de error parecido a éste
En este caso tenemos que lanzarlo manualmente. Nos vamos a una consola y hacemos mysqld & como root.
# mysqld &
[1] 6798
root@soviet:/home/m0skit0# 110604 13:08:10 [Note] Plugin 'FEDERATED' is disabled.
110604 13:08:10 InnoDB: Started; log sequence number 0 44233
110604 13:08:10 [Note] Event Scheduler: Loaded 0 events
110604 13:08:10 [Note] mysqld: ready for connections.
Version: '5.1.49-3' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Debian)
Podemos cerrar el terminal. Ahora volvemos a lanzar MySQL Administrator y vamos para dentro. Aquí podemos comprobar que MySQL está corriendo ("Server is running"). En Service Control podemos pararlo/arrancarlo.
Cerramos el administrador y ahora lanzamos MySQL Query Browser, que en mi caso estaba justo debajo del MySQL Administrator en la entrada del menú.
La base de datos de ejemplo que voy a hacer va a ser para guardar mi colección de discos. Veamos cómo creamos una estructura de tablas para este objetivo.
Lo primero es crear un esquema para nuestra discografía. En la pestaña Schemata hacemos click derecho en la ventana y seleccionamos Create Schema, le ponemos el nombre discografia y OK. Ahora nos debería aparecer un esquema discografia. Le damos doble click para ponerlo activo.
Ahora vamos a añadir una tabla a este esquema. Hacemos click derecho y seleccionamos Create Table.
Esta tabla va a describir al artista, así que le ponemos el nombre ARTISTA. He (mal) pensado en guardar los siguientes datos sobre cada artista: Nombre, Fecha de formación, País de origen y Biografía. A esto hay que añadirle una clave primaria para la tabla, un identificador de artista, que llamaré ID_ARTISTA (para no caer en la originalidad). Primero añado esta columna como clave primaria.
Añado el nombre.
La fecha de formación.
El país de origen (en este caso sería mejor hacer una tabla de países y enlazar esta columna como clave externa a dicha tabla, pero voy a simplificar).
Y la biografía
Hacemos click en Apply changes, lo que nos mostrará el script SQL que se va a ejecutar, lo revisamos si queremos, pulsamos Execute y nos debería informar de que la tabla ha sido creada.
Luego nos creamos una tabla para los álbumes.
Y otra para las pistas.
Ahora vamos a modificar cada una de las tablas para añadirles claves externas (foreign keys - FKs). Esto es para evitar que por ejemplo para un Álbum se introduzca un ID de Artista que no existe. Para poder añadir FKs, primero es necesario modificar el motor de base de datos de todas las tablas. Para cada una de las 3 tablas, hacemos click derecho sobre ella -> Edit -> Table Options -> Storage Engine -> InnoDB. Aplicamos los cambios.
Ahora volvemos a editar la tabla ALBUM para añadirle una FK a ARTISTA, ya que ALBUM tiene una columna que referencia un ID_ARTISTA. Hacemos click en Foreign Keys y luego en el + verde que hay abajo a la izquierda. Añadimos la FK:
Para añadir una columna en la ventana de la derecha, se selecciona y se arrastra desde la lista de columnas que se encuentra arriba. La Foreign Column hay que añadirla a mano. No olvidéis pulsar Enter después de escribir ésta.
Procedimiento similar con la tabla PISTA:
Bueno, ya tenemos lista nuestra base de datos para discografías. Si le dáis un poco de vueltas veréis que se puede ampliar y mejorar, pero eso ya lo dejo a vuestra imaginación.
Ahora vamos a introducir algunos artistas y álbumes para hacer pruebas. Para este menester, voy a elegir el disco Road Games del señor Allan Holdsworth. Primero debemos insertar el artista, ya que de lo contrario no podríamos insertar el álbum al tener una referencia a un artista. Para esto hacemos doble click sobre la tabla ARTISTA y veremos que nos sale una sentencia SQL arriba
SELECT * FROM ARTISTA A LIMIT 0,1000
Presionamos Execute y nos debería quedar tal que así
Ahora hacemos click sobre Start Editing, introducimos los datos y hacemos click en Apply Changes. Tened en cuenta que no hace falta introducir el ID_ARTISTA, ya que MySQL se encarga de aumentarlo automáticamente. Lo mismo ocurre con el ID primario de las otras tablas.
Ahora el álbum.
Y las pistas
Ahora por ejemplo si yo quiero conocer la duración de la pista 3 del disco de 1983 de Allan Holdsworth:
SELECT PISTA.DURACION FROM PISTA, ARTISTA, ALBUM WHERE ARTISTA.NOMBRE = 'Allan Holdsworth' AND ARTISTA.ID_ARTISTA = ALBUM.ID_ARTISTA AND ALBUM.FECHA_LANZAMIENTO = '1983-00-00' AND PISTA.ID_ALBUM = ALBUM.ID_ALBUM AND PISTA.NUM_PISTA = 3
En la siguiente parte os contaré cómo conectar desde Java a nuestra base de datos. Hasta entonces, ¡sed buenos y políticamente activos!
Muy bueno, le echaré un ojo apenas tenga tiempo ;)
ReplyDeleteGracias, espero que te sea de utilidad ;)
ReplyDeletemi estimado... esta publicacion es una gran duda que he tenido hacerk d las claves foraneas... yo creia q era algo mas complikdo relacionar tablas jejeje pero ya m di cuenta q no... un 100 por tu publi...
ReplyDelete