Aprende a crear una aplicación sencilla con Java y MySQL

Después del éxito de mi última y demagógica publicación, esta vez voy a aportar algo más constructivo, tratando de enseñaros a crear una aplicación sencilla en Java. Este semi-tutorial no explica las cosas más básicas de Java y MySQL, sino que está más bien dirigido a quienes ya tengan unos fundamentos básicos de ambas tecnologías. También os compartiré el proyecto de NetBeans con el que he hecho un ejemplo muy sencillo de cómo crear una aplicación gráfica con Java y MySQL con una interfaz gráfica bien sencillita.


A mi Java siempre me ha gustado mucho, gracias sobre todo a que se una buena tecnología multiplataforma, es muy sencillo hacer correr un programa en Java tanto en Windows como en GNU/Linux (en OS X también, pero es algo que no he podido realizar). A pesar de todo esta tecnología tiene sus defectos, como por ejemplo su pobre rendimiento, que ojalá mejore en el próximo Java 8 y ese plugin web de Oracle, que se ha mostrado como un coladero de primera. He probado otras tecnologías multiplataforma, como Mono, pero he visto que correr una aplicación de Mono escrita en GNU/Linux sobre Windows es todo un dolor de muelas, con lo que decidí quedarme con Java.

Sin embargo, no todo es malo en torno Java, de hecho algo relacionado con Java es la única cosa positiva que conozco de la compra de Sun por parte de Oracle, ya que para Java 7 optaron por usar como base OpenJDK, la implementación libre de Java patrocinada por Sun y luego por Oracle, que por defecto venía incluida en muchas distribuciones GNU/Linux ya que la máquina virtual oficial de Sun era software privativo. Esto hizo que Java pasase a ser una plataforma abierta casi en su totalidad, aunque por desgracia el resultado a nivel cualitativo no ha sido todo lo bueno que se esperaba.

Lo bueno de la apuesta por OpenJDK como implementación por defecto es que con el tiempo los usuarios de Linux no hemos tenido que echar de menos la licencia DLJ que Oracle retiró hace un tiempo, ya que en OpenJDK tenemos todo o casi todo el soporte de la versión oficial de Java, cosa que nos permite instalar el NetBeans oficial sobre OpenJDK sin problemas.

Después de esta breve explicación de historia, voy a explicar algunos detalles a tener en cuenta a la hora de programar una aplicación de Java con MySQL, que debería funcionar igualmente sobre MariaDB, aunque yo por accidente instalé MySQL en vez de MariaDB en Fedora 18 y lo he dejado, aun así espero migrar en septiembre, cuando instale Fedora 19.

Antes de ponernos a programar nada, hay que instalar el conector de MySQL para Java. No se el proceso en OS X, así que explicaré como hacerlo en GNU/Linux y Windows, que son los dos sistemas operativos que conozco.

Configurar el conector en Fedora y Linux en general

Para poder ejecutar esta aplicación en Java y MySQL/MariaDB vais a necesitar los siguientes paquetes:

  • java-1.7.0-openjdk-devel
  • mysql ó mariadb
  • mysql-server ó mariadb-server
  • mysql-connector-java

El nombre de MySQL y MariaDB no creo que cambie en ninguna distribución, sin embargo el conector y el paquete de desarrollo de OpenJDK pueden cambiar de nombre en cada distribución. Una búsqueda en Google podría sacaros de dudas (o en el propio gestor de paquetes), aun así si tenéis algún problema no dudéis en escribir un comentario y os ayudaré en vuestra distribución, sobre todo si es sencilla de instalar como Red Hat, Debian, Ubuntu u OpenSuse.

El paquete de desarrollo de OpenJDK es imprescindible para poder instalar NetBeans, aunque si queréis podéis usar Eclipse, ya sea la versión oficial o bien la versión que hay en los repositorios de vuestra distribución.

El conector de MySQL para Java también se pude descargar del sitio web oficial y NetBeans trae uno, pero como las distintas versiones de OpenJDK que hay para Linux no están actualizados por Oracle, sino por cada uno de los mantenedores de cada distribución, prefiero usar el que trae la distribución para curarme en salud y ahorrarme algún problema de compatibilidad, aunque por suerte Java no suele dar problemas con eso si son versiones cercanas.

Con nuestro servidor de bases de datos y los paquetes de desarrollo para Java instaldos, en NetBeans procedemos a crear la librería que nos permita tener conexión con la base de datos a través Java.

Si queréis encontrar el conector de Java para MySQL, lo encontraréis en la carpeta /usr/share/java.


Ahora en NetBeans tendremos que añadir la librería con nuestro conector 100% compatible con nuestra versión de OpenJDK (o eso se supone). Para ello nos dirigiremos a Herramientas y luego a Librerías de Ant (si, lo tengo en inglés, pero tratándose de un tuto para programadores aquí no valen quejas).


Nos saldrá la ventana de abajo, en la que tendremos que crear la librería a través de New Library y luego añadir el conector a través de Add Jar/Folder. El conector, como he dicho antes, se localiza en /usr/share/java y hay que coger el fichero jar que se localice ahí y que se identifique como Java para MySQL, cuyo nombre lo podéis ver en el pantallazo, aunque este puede variar un poco según la distribución. En mi caso la librería se llama simplemente JDBC, aunque también se puede ver el conector que trae NetBeans, que está en la librería MySQL JDBC Driver.


Configurar el conector en Windows

Windows, ese sistema operativo el cual le reconozco sus virtudes y sus grandes mejoras en los últimos tiempos, pero que por traumas del pasado no suelo tocar mucho ya.

Dejando de lado mis cosas, voy a enseñar a instalar el conector de MySQL para Java en el sistema operativo de Microsoft.

Evidentemente, Windows no tiene nada que ver con Linux y el proceso es totalmente diferente. En Windows trabajaremos todo sobre los productos oficiales de Oracle, ya que no tenemos OpenJDK para Windows, al menos que yo sepa, aparte que ahorrará mantenimiento a los usuarios de dicho sistema operativo.

Antes de nada, tenéis que tener instalados el JRE y el JDK, que os podéis descargar aquí y no os olvidéis de NetBeans.

Una vez instalado toda la parafernalia para programar aplicaciones en Java, procedemos a instalar el conector de MySQL para Java en Windows. Para ello nos tendremos que ir a la dirección web que aparece en la imagen de abajo.


No os preocupéis por el sistema, es Java, aquí todo se puede ejecutar en cualquier sitio, recordad el lema de Java, Programa una vez, ejecuta en cualquier sitio.

Una vez descargado el conector lo descomprimimos o bien directamente con el descompresor lo tendremos que colocar en la subcarpeta lib del JRE, en Archivos de Programas.


Quizá os preguntéis, ¿no tenía NetBeans su propio conector?, cierto, pero es que así podremos ejecutar la aplicaciones sin que dependan de la librería de NetBeans, ya que de otra forma solo podríamos ejecutar las aplicaciones sobre NetBeans, con este detalle podremos redistribuir nuestra aplicación.

Me he comido la instalación de MySQL/MariaDB, para eso yo suelo tirar por lo fácil e instalo WAMP y así tengo PHPMyAdmin, muy útil para hacer backups fácilmente, aparte de ponerlo fácil para importar la base de datos.

WAMP actualmente instala dos servicios en Windows, uno para MySQL y otro para Apache. Si vendéis la aplicación recordad a algún cliente podéis mantener activo el servicio de MySQL para cuando le haga falta y dejar el Apache desactivado a todos los efectos.

Otra idea que se podría hacer es buscar el conector de MySQL para Java de NetBeans y ponerle un acceso directo en la subcarpeta lib del JRE, la que se ha mencionado un poco más arriba. No lo he probado y no se si funcionará, en Linux seguro, pero en Windows no se. Lo bueno de eso es que ahorrará el tener dos conectores y a lo mejor al actualizar los componentes de NetBeans también se actualiza el conector, pero como cambie el nombre del fichero original el acceso directo quedaría roto.

Otra opción sería crear una librería como la que he explicado en la sección de la instalación para Linux con el conector descargado en vez de usar el que trae NetBeans.

Añadir la librería del conector de MySQL en un proyecto de NetBeans

Bueno, ya tenemos todo lo necesario instalado para poder usar Java con MySQL tanto en GNU/Linux como en Windows, así que ya es hora de pasar a la faena, o sea, la programación.

Antes de empezar a picar código, tenemos que asegurarnos de que el proyecto de NetBeans esté enlazado al conector de la base de datos. Para ello nos dirigimos a la carpeta de librerías y después de pulsar con el botón secundario del ratón sobre él seleccionamos añadir librería.


Luego seleccionamos la librería que corresponda al conector de MySQL que queremos usar, en mi caso la librería creada JDBC, pero también podéis usar la librería MySQL JDBC Driver que es el que trae NetBeans o bien el nombre que le hayáis puesto a la librería que habéis creado si es el caso.

Ya con el conector linkado a nuestro proyecto podemos empezar a crear la aplicación.

Código para conectar con la base de datos

Después de toda esta travesía de instalaciones y configuraciones, por fin llega lo divertido, ¡¡¡ ALELUYA !!!, creía que jamás íbamos a llegar a este punto.

Hay que tener en cuenta que Java es un lenguaje de programación orientado a objetos, encima de uno de los más puros que existen de los de este tipo, así que la gracia de Java es ir jugando con clases. Podríamos copiar y pegar el código de la conexión de la base de datos en cada método, pero eso está muy feo en Java aunque por desgracia hay demasiados programadores que tienen esa mala costumbre en pro de la productividad.

Lo que vamos a hacer es encapsular la conexión de la base de datos en una clase que podemos manejar a través de objetos. Esto minimizará mucho la cantidad de código, como bien podréis ver en la gran cantidad de comentarios que hay en el ejemplo. Perdonad si no está muy limpio y las chorradas, pero en parte lo hago así para que veáis el ahorro que supone trabajar con clases y sobre todo, las ventajas de modular el código.

Para poder seguir explicando un poco más copiaré y pegaré el código útil de la clase de la conexión a la base de datos, que corresponde al fichero Conexiones.java.

import javax.swing.*;
import java.sql.*;
/**
*
* @author edu
*/
public class Conexiones {

private Statement st;

public Conexiones(){
try{

// Conectamos
Connection con= DriverManager.getConnection("jdbc:mysql://127.0.0.1/prueba-java","usuario","contrasena"); //Datros de tu conexion
// Declaración de la conexión
st = con.createStatement(); // El con.createStatement() viene de arriba, de Connection con= DriverManager.getConnection

}catch(Exception ex){
//System.out.println("Ha habido un error a la hora de insertar los datos: "+ex);
JOptionPane.showMessageDialog(null,"Ha habido un error a la hora de insertar los datos: "+ex,"Error",0);
}

}

public Statement obtenerDeclaracion(){
return st;
}

}

Como podéis comprobar, el código es bien sencillo, donde solo tenemos un constructor al cual no le pasamos ningún parámetro y un método muy simple que solo nos devuelve la declaración del objeto tipo Conexiones creado.

Os recomiendo que trabajéis siempre con la IP y no con la palabra localhost, ya que a mi me ha dado el problema de abajo todo porque en el fichero /etc/hosts no tenía indicado qué localhost era la IP 127.0.0.1, cosa que no me afectaba en Apache, pero que en Java me ha dado verdaderos dolores de cabeza hasta que encontré el error. La verdad es que a veces los errores que parecen enormes luego tienen soluciones bien absurdas, algo que es más o menos frecuente en la programación.


Si tenéis el mismo problema, solo tenéis que poner la siguiente línea de código en /etc/hosts.

  • 127.0.0.1           localhost

Como podréis ver, al jugar con un IP eso indica que el servidor de la base de datos no tiene por qué estar en el mismo ordenador, podéis crear una aplicación que sería un cliente que llamase a una base de datos ubicada en otro ordenador que hace de servidor de la base de datos, aunque para eso tenéis que asignar una IP fija al servidor para que la conexión no se pierda.

No hará falta decir que tenéis que cambiar el usuario y la contraseña por el que tenéis puesto en vuestra base de datos.

El método obtenerDeclaracion() nos sirve para poder interactuar con el objeto tipo Conexiones que hayamos creado. Cada vez que lo llamemos podremos ejecutar una consulta a la base de datos.

En el código del fichero main del proyecto creamos un objeto estático del tipo Conexiones, para poder realizar una conexión a la base de datos desde cualquier punto, ya sea el método Main o bien otro que vamos generando a través de la interación con los elementos del formulario, en especial al pulsar botones, cosa que no voy a explicar porque como ya he dicho al principio, este tutorial es para gente que ya tenga unas ideas básicas, aparte que sino no terminaría nunca.

Interactuar con la base de datos es bien sencillo. Con el objeto Conexiones estático (o sea, global para toda la clase del fichero main), podemos ejecutar consultas y actualizaciones en la base de datos.

Si queremos ejecutar consultas, o sea, un select de SQL, tenemos que llamar al método executeQuery() después de invocar a obtenerDeclaracion() en el objeto, mientras que si queremos hacer un insert o un update, tenemos que poner el método executeUpdate() tras invocar a obtenerDeclaracion(). Lo veréis más claro en el código de ejemplo.

Ventanas independientes

El problema es que por defecto, cuando creamos varias ventanas, cuando cerramos una se cierra toda la aplicación, algo que no siempre es lo deseable. Para ello tendremos que hacer que cada ventana, en nuestros caso formulario, sea independiente.

Para hacer independientes las ventanas seleccionamos el jFrame (posiblemente desplegándolo) en nuestro navegador, por defecto situado en la parte inferior izquierda del NetBeans y luego seleccionar la opción Dispone en defaultCloseOperation, que se encuentra en Propiedades.


Bueno, con todo esto y un café ya tenéis la armas para poder crear una aplicación con Java, MySQL y NetBeans. Quizá no sea algo muy profundo y seguro que hay más de una cosa mejorable, pero con un poco de ingenio podréis hacer cosas interesantes con esto.

Y como no y casi se me olvida, dejo aquí el enlace para poder descargar el ejemplo de la conexión a través de una aplicación gráfica.

Comentarios

  1. Me gusta usar con MySQL herramienta gratuita de Valentina Studio, hace todo lo que necesito, y lo hace muy bien http://www.valentina-db.com/en/valentina-studio-overview

    ResponderEliminar
  2. despues de terminar tu aplicacion como la instlas en otra maquina... tienes que instalar mysql?

    ResponderEliminar
    Respuestas
    1. Por desgracia si, ya que la base de datos está separada de la aplicación, cosa que no tiene que ser así, pero en este ejemplo didáctico lo está.

      Por suerte puedes instalar MySQL en cualquier plataforma hoy en día y en su defecto puedes instalar MariaDB.

      Eliminar
  3. Es posible utilizar la app SQLite con este ejemplo, si no se desea instalar MySQL.

    ResponderEliminar

Publicar un comentario

Entradas populares