El uso de bases de datos es una característica fundamental de cualquier aplicación en la actualidad. Las bases de datos MySQL (ver MySQL dev) son unas de las más utilizadas, aunque existe una tendencia actual hacia el uso de nuevas plataformas (véase MongoDB). Aún así, MySQL es uno de los motores de bases de preferencia para los desarrolladores de hoy (ver https://db-engines.com/en/ranking).
En Panama Hitek ya hemos escrito sobre el uso de MySQL con aplicaciones en Java:
- Comunicar Java con base de datos MySQL
- Creación de bases de datos MySQL con Xampp
- Los 7 pasos a seguir para el manejo de MySQL con Java
Hasta ahora hemos explorado la conexión de aplicaciones Java a MySQL utilizando el driver JDBC. Esta es una librería diseñada para Java que facilita interactuar con las bases de datos MySQL. Sin embargo, este esquema presenta sus desventajas.
El JDBC funciona muy bien con bases de datos locales. Cuando se trabaja con bases de datos remotas, es decir, no instaladas en la computadora, nos encontramos con una serie de inconvenientes. Para usar el JDBC, el servidor remoto debe permitir el acceso a nuestra aplicación en Java, lo cual a veces puede ser tedioso. No es imposible, pero presenta ciertos inconvenientes.
Una opción interesante para compartir información con bases de datos remotas es utilizar Java con PHP. En este artículo explicaremos cómo compartir información entre un script en PHP y una aplicación en Java.
Base de datos de ejemplo
Para este ejemplo utilizaremos una base de datos de prueba. A continuación el código que crea la base de datos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
CREATE TABLE `users_list` ( `id` int(11) NOT NULL, `name` varchar(25) NOT NULL, `last_name` varchar(25) NOT NULL, `birthdate` varchar(10) NOT NULL, `gender` varchar(1) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `users_list` (`id`, `name`, `last_name`, `birthdate`, `gender`) VALUES (1, 'Samuel', 'Ortega', '18/10/1992', 'M'), (2, 'Ian', 'Cabrera', '30/04/1990', 'M'), (3, 'Ana', 'Caballero', '23/2/1993', 'F'), (4, 'Pedro', 'Navarro', '11/11/1994', 'M'); ALTER TABLE `users_list` ADD PRIMARY KEY (`id`); ALTER TABLE `users_list` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5; |
Creamos una base de datos en MySQL (usando Xampp y PHP MyAdmin).
Ahora hacemos clic en la pestaña que dice SQL, ejecutamos el código y creamos la tabla con la información que usaremos para el ejemplo.
Creación de clase Users
Para guardar la información obtenida de la base de datos vamos a crear una clase (Java Class) llamada Users. Esta clase contará con los siguientes atributos:
- id: ID de la tabla
- name: nombre de la persona
- lastName: apellido de la persona
- birthdate: cumpleaños de la persona
- gender: género de la persona
El código que crea esta clase lo tenemos disponible en nuestro repositorio en Github.
Scripts en PHP
Para interactuar con la base de datos se necesitan scripts en PHP. Estos son los encargados de hacer las consultas a la base de datos y comunicar la información a la aplicación en Java.
Para obtener la información desde la base de datos usaremos un script al que llamaremos getInfo.php. El código de este script se encuentra disponible en nuestro repositorio de Github.
También es necesario utilizar un script para insertar la información en la base de datos. A este script lo llamaremos saveInfo.php. El código de este script también se encuentra disponible en nuestro repositorio de Github.
Estos scripts necesitan instalarse en un servidor web. Este tema ya fue expuesto en el post montaje de un servidor Apache en nuestra PC.
De esta forma, cuando accedemos al script getInfo.php desde un navegador web, veremos el siguiente resultado.
Enlazando Java con PHP
La programación en Java consiste en compartir información con los scripts en PHP. Se ha diseñado una clase (Java Class) llamada PHPClass donde se encuentran los métodos necesarios para insertar y extraer la información. Estos métodos utilizan la clase User para empaquetar la información extraída en un objeto almacenado en la memoria dinámica, de tal forma que se pueda acceder a la información en cualquier momento.
Los métodos de la clase PHPClass son:
- getInfo() devuelve una lista de objetos de la clase User (Java Object), donde cada objeto representa un registro de la tabla users_list en la base de datos. Cada objeto contiene los valores de las columnas empaquetados en su interior.
- saveInfo(User user) guarda la información en la base de datos. La información que será guardada se le «pasa» al método a través de un objeto de la clase user.
- getJSON() obtiene un JSON a partir del script getInfo.php
Estos métodos requieren del uso de la librería JSON-Simple (Java API), la cual pueden agregar al proyecto utilizando Maven. Para ello se agrega las siguientes instrucciones al archivo pom.xml:
1 2 3 4 5 |
<dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1.1</version> </dependency> |
Si no utilizan Maven, pueden buscar la librería en Google y descargarla. Para probar el funcionamiento de este código usamos la clase MainClass, cuyo código compartimos a continuación.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package Java_PHP; public class MainClass { public static void main(String[] args) { //Agregar registro a la tabla users_list en la base de datos example_database new PHPClass().saveInfo(new User(0, "Antony", "Garcia", "30/07/1992", "M")); /* Se imprimen todos los registros almacenados en la tabla users_list de la base de datos example_database. Se utiliza una expresión lambda (forEach) para recorrer una lista (getInfo() devuelve una lista de usuarios) */ new PHPClass().getInfo().forEach(i -> { String usuario = "Nombre: " + i.getName() + ", Apellido: " + i.getLastName() + ", Fecha de nacimiento: " + i.getGender() + ", Sexo: " + i.getGender(); System.out.println(usuario); }); } } |
Este código almacena un dato en la tabla users_list y luego imprime todos y cada uno de los registros almacenados.
Para la impresión de los datos se usa una expresión lambda, propia de Java8 que permite recorrer la lista devuelta por el método getInfo() de la clase PHPClass. Los resultados son mostrados en la consola:
Los archivos que le dan funcionalidad a este proyecto se encuentran en nuestro repositorio de Github, cuyo enlace es el siguiente:
https://github.com/PanamaHitek/java_post_examples.git
Esperamos que la información presentada sea de utilidad para ustedes. Saludos.
hola Antony, podrías subir a tu repositorio un ejemplo de este código para abrirlo desde el NetBeans y solo tener que configurar la base de datos? gracias desde ya, muy valiosa la info 🙂
Déjame ver si lo hago este fin de semana