Explicamos cómo acceder a un servidor de base de datos MySQL o MariaDB de forma nativa (sin instalar software adicional) usando Java como lenguaje de programación y JDBC como método de conexión. No usaremos los métodos de persistencia y serialización de Java, que explicaremos en otro artículo, únicamente la conexión directa con MySQL o MariaDB de nuestra aplicación. Usaremos el IDE IntelliJ IDEA, aunque también explicamos cómo hacer la aplicación en Eclipse.
- Descarga del driver JDBC correspondiente para Java.
- El servidor de MySQL o de MariaDB.
- Crear aplicación Java con acceso a MySQL o MariaDB de forma nativa con JDBC y con el IDE IntelliJ IDEA.
- Agregar JAR de driver JDBC en Eclipse.
- Consideraciones y sugerencias.
Descarga del driver JDBC correspondiente para Java
En primer lugar descargaremos el fichero .jar del driver JDBC, será este fichero el que contenga los métodos necesarios para interactuar con la base de datos MySQL o MariaDB. Dicho fichero se puede descargar de la web oficial de MySQL, en la URL:
https://dev.mysql.com/downloads/connector/j/
Para que nuestro programa no dependa del sistema operativo y funcione correctamente en Windows, Linux o MAC OS, seleccionaremos en «Select Operating System» la opción «Platform Independent»:
Descargando el fichero mysql-connector-java-8.0.22.zip o el fichero mysql-connector-java-8.0.22.tar.gz. Son el mismo pero comprimido con zip o con gz respectivamente.
Por supuesto, es la versión a la fecha de la realización de este artículo, que puede variar conforme pasen los meses. Descargaremos la versión más reciente, a ser posible, del Connector/J (Driver JDBC de MySQL).
Este driver JDBC de MySQL servirá tanto para bases de datos MySQL como MariaDB, pero si vamos a usar el motor de base de datos MariaDB podemos descargar su driver JDBC específico desde:
https://mariadb.com/kb/en/about-mariadb-connector-j/
Descomprimiremos el fichero JDBC descargado, que contiene lo siguiente:
En nuestro caso solo nos interesa el fichero mysql-connector-java-8.0.22.jar, que es el que usaremos en nuestra aplicación, el que contiene todos los métodos de acceso y manipulación de base de datos MySQL o MariaDB.
El servidor de MySQL o de MariaDB
Como es lógico, necesitaremos disponer de un servidor de base de datos con MySQL Server o bien con MariaDB. Y necesitaremos, por supuesto, la dirección de este servidor, el puerto de acceso, un usuario y una contraseña con permisos para acceder a las tablas que necesitemos en la aplicación.
En este ejemplo usaremos un servidor instalado localmente, en el mismo equipo en el que ejecutaremos la aplicación Java. Para instalarlo hemos usado XAMPP, que instala MySQL, Apache, PHP y otros componentes de forma automática. Aunque no es necesario usar XAMPP, puede descargarse el instalador de MySQL Server directamente de su web oficial. Por ejemplo, en este artículo, explicamos cómo instalar MySQL Server en Windows:
Una vez que tengamos el servidor de MySQL o MariaDB, un usuario y una contraseña, estaremos preparados para «atacar» dicha base de datos con nuestra aplicación Java.
Para nuestro ejemplo tendremos creada una tabla llamada «articulos» en una base de datos llamada «lista_compra»:
Dicha tabla la hemos creado ejecutando la siguiente sentencia SQL:
1 2 3 4 5 6 7 8 |
CREATE TABLE articulos ( id int(11) NOT NULL AUTO_INCREMENT, nombre varchar(100) NOT NULL, cantidad int(11) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY id_UNIQUE (id), UNIQUE KEY `nombre_UNIQUE` (nombre) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 |
Crear aplicación Java con acceso a MySQL o MariaDB de forma nativa con JDBC y con el IDE IntelliJ IDEA
En nuestro caso usaremos el IDE de desarrollo IntelliJ IDEA, pero por supuesto podremos usar cualquier otro como Eclipse o NetBeans, el código de acceso a MySQL será el mismo.
Crearemos un nuevo proyecto Java
Seleccionaremos «Java» en la parte izquierda y pulsaremos «Next»:
Crearemos una aplicación de consola, por lo que marcaremos «Create project from template» y elegiremos «Command Line App»:
Introduciremos un nombre para nuestro proyecto, por ejemplo «JavaAccesoMySQL» y una ubicación en una carpeta. Pulsaremos «Finish»:
El código que usaremos para acceder al servidor de MySQL o MariaDB, para ejecutar una consulta SQL sobre una tabla y mostrar los valores devueltos por la consulta SQL por consola, será el siguiente (es importante añadir los import correspondientes para usar el driver JDBC):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import java.sql.*; public class Main { public static void main(String[] args) { //Cargaremos el driver JDBC de acceso a MySQL/MariaDB try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException error) { System.out.println("Error al cargar el driver JDBC de MySQL: " + error.getMessage()); } //Realizamos la conexión con el servidor MySQL/MariaDB //Con los datos de conexión: dirección, puerto, usuario y contraseña //En este ejemplo suponemos que el servidor MySQL está en localhost, puerto 3306, usuario root, sin contraseña Connection conBD = null; try { conBD = DriverManager.getConnection( "jdbc:mysql://localhost:3306/lista_compra?serverTimezone=UTC", "root", ""); } catch (SQLException error) { System.out.println("Error al conectar con el servidor MySQL/MariaDB: " + error.getMessage()); } //Creamos una declaración (statement) de la conexión Statement mStm = null; try { mStm = conBD.createStatement(); } catch (SQLException error) { System.out.println("Error al establecer declaración de conexión MySQL/MariaDB: " + error.getMessage()); } //Ejecutamos una consulta SQL contra el statement anterior //El resultado se guardará en el ResultSet ResultSet mRS = null; try { mRS = mStm.executeQuery("Select nombre, cantidad from articulos"); //Recorremos todos los registros del SQL devuelto en el ResultSet while (mRS.next()) { System.out.println("Artículo: " + mRS.getString(1) + " Cantidad: " + mRS.getString(2)); } } catch (SQLException error) { System.out.println("Error al ejecutar SQL en servidor MySQL/MariaDB: " + error.getMessage()); } //Cerramos el ResultSet, el Statement y la conexión try { mRS.close(); mStm.close(); conBD.close(); } catch (SQLException error) { System.out.println("Error al cerrar conexión a servidor MySQL/MariaDB: " + error.getMessage()); } } } |
Si intentamos compilar la aplicación para probarla, veremos que nos muestra este error:
Error al cargar el driver JDBC de MySQL: com.mysql.jdbc.Driver
Error al conectar con el servidor MySQL/MariaDB: No suitable driver found for jdbc:mysql://localhost:3306/lista_compra
Es debido a que no hemos añadido el driver JDBC en su carpeta adecuada. Para solucionar este error solo tendremos que copiar el fichero descargado anteriormente mysql-connector-java-8.0.22.jar a la carpeta lib de nuestra aplicación:
Y desde el menú «File» – «Project Structure»
Seleccionaremos «Modules» [1] y en la parte derecha pulsaremos en «Dependencies» [2]. Pulsaremos en el botón «+» [3]:
Seleccionaremos «JARs or directories…»:
Seleccionaremos la carpeta lib de nuestro proyecto, donde tenemos copiado el fichero JDBC mysql-connector-java-8.0.22.jar:
Guardaremos los cambios pulsando OK:
Y ya podremos compilar y probar nuestra aplicación Java con acceso a MySQL o MariaDB de forma nativa. Ahora sí, la aplicación se ejecutará, usará el driver JDBC y accederá al servidor MySQL, ejecutando la sentencia SQL, obteniendo los datos de la tabla y mostrándolos en consola:
Agregar JAR de driver JDBC en Eclipse
En el caso de Eclipse, si queremos agregar el fichero .jar del driver JDBC mysql-connector-java-8.0.22.jar a nuestro proyecto, en primer lugar lo copiaremos a la carpeta lib (como hemos hecho anteriormente para IntelliJ IDEA) de nuestro proyecto:
Si no existiera la carpeta «lib» la crearemos, como es lógico. Una vez que tengamos el fichero mysql-connector-java-8.0.22.jar en dicha carpeta, en nuestro caso en:
D:\Mis documentos\Java\JavaAccesoMySQL\lib
Pulsaremos con el botón derecho del ratón sobre la carpeta del proyecto en Eclipse [1] y seleccionaremos «Proporties» [2] en el menú emergente:
Seleccionaremos «Java Build Path» [1], pulsaremos en la pestaña «Libraries» [2] y en el botón «Add JARs…» [3]:
Buscaremos el fichero JAR mysql-connector-java-8.0.22.jar en la carpeta lib de nuestro proyecto y lo seleccionaremos. Pulsaremos «OK»:
Pulsaremos «Apply an close»:
Y ya podremos ejecutar la aplicación desde Eclipse, que funcionará correctamente:
Consideraciones y sugerencias
Por supuesto, esta no es la forma idónea de realizar una aplicación Java con acceso a base de datos. Lo óptimo es usar persistencia y serialización que independicen los métodos de acceso a la base de datos del resto de la lógica de la aplicación. De esta forma no tendremos que cambiar casi nada en nuestra aplicación si decidimos cambiar el motor de base de datos (Oracle, SQL Server, Firebird, MySQL, MariaDB, PosgreSQL, SQLite, Access, MongoDB, XML, etc.).
Además, es recomendable usar una clase separada para la conexión con la base de datos y los métodos de manipulación y tratamiento de tablas y registros.
Este ejemplo es una forma de mostrar que con Java se puede acceder nativamente (sin instalar ODBC ni drivers de terceros) a MySQL, a MariaDB o a cualquier otra base de datos, únicamente necesitaremos el fichero JDBC correspondiente, como hemos explicado anteriormente.
En el ejemplo hemos realizado la conexión con el servidor de MySQL o MariaDB mediante una cadena de conexión establecida en el código: servidor, puerto, usuario y contraseña. Como es lógico, este método no es idóneo porque si el servidor de base de datos está ubicado en otro lugar o bien tiene un usuario y contraseña diferentes siempre habría que cambiar el código y volver a generar el JAR de la aplicación, lo cual no es nada recomendable. Lo ideal es almacenar estos datos de conexión en un fichero XML (o de configuración) y que la aplicación los lea antes de realizar la conexión.
Esta aplicación funcionará perfectamente en cualquier sistema operativo: Windows, Linux o MAC OS.