Cargando



Trabajando con Bases de Datos en Java

En este tutorial veremos como podemos trabajar haciendo las diferentes conexiones a Bases de Datos desde el lenguaje de programación Java, con ello lograremos dotar de mayor versatilidad a nuestras aplicaciones y así poder alcanzar objetivos más grandes.


ene 14 2015 18:48
Profesional
ene 14 2015 21:35
Java como lenguaje de propósitos múltiples aparte de las diferentes funcionalidades que podemos lograr también nos permite trabajar con la persistencia de datos, para ello podemos hacer conexión con los diferentes motores de Bases de Datos que existen en el mercado.

Una Base de Datos puede ser algo tan sencillo como un sistema de llave-valor en un archivo de texto plano, como soluciones más complejas y modernas como por ejemplo las no relacionales, esto hace que el poder desarrollar diferentes esquemas de conexión sea una característica obligatoria.

Utilizando JDBC


JDBC son un conjunto de clases que permiten que Java establezca conexiones con motores de Bases de Datos, esto nos permite obtener los resultados de las consultas en un objeto llamado ResultSet.

Debido a que cada motor es diferente es probable que el ResultSet que recibamos sea particular al mismo, es por ello que no nos resulta conveniente estructurar nuestra aplicación alrededor de dicho objeto.

Para solventar este problema podemos utilizar lo que se llama un objeto de acceso, con el cual podemos gestionar las diferentes formas de nuestro ResultSet haciendo que su aplicación dentro de nuestro programa sea más sencilla de implementar y así el desarrollador tenga menos problemas.

El patrón de diseño DAO
El Data Access Object o DAO es un patrón de diseño que recoge lo que veníamos explicando en el punto anterior, este nos requiere crear una clase de acceso a las propiedades de nuestra Base de Datos. Para lograr que esto funcione debemos hacer trabajar el conjunto JDBC y el controlador que nos permite hacer conexión con el motor particular que deseamos, adicionalmente debemos realizar la implementación lógica que explicamos para evitar la dependencia de componentes específicos que solo nos dificultarían la migración a un motor de Base de Datos diferente.


Hacer nuestra primera conexión a través de JDBC


Lo primero que necesitamos hacer para poder construir una conexión JDBC es identificar cual es el motor al cual queremos hacer la conexión y luego conseguir las clases necesarias para dicha conexión, en este caso vamos a hacer una conexión MySQL, este motor es ligero, gratuito y multiplataforma, por lo que podremos instalarlo tanto en Windows, Linux o Mac.

Obtener el Connector/J


Connector/J es el conjunto de clases que nos ofrece el equipo de desarrollo de MySQL, con ellas podremos hacer que JDBC trabaje en conjunto con este manejador de Bases de Datos relacionales, para poder incorporarlo a nuestro proyecto debemos seguir los siguientes pasos.

1- Debemos descargar el archivo correspondiente a nuestra plataforma, ya sea Windows o para otras desde la página oficial de MySQL en el siguiente enlace.


2- En este tutorial trabajaremos bajo Windows por lo que para su implementación en nuestros ejemplos lo haremos en tiempo de ejecución para mayor facilidad, sin embargo al descargar el paquete lo instalamos para tener el mismo disponible en nuestro equipo.


3- Ahora procederemos a probar que todo funcione correctamente en nuestro equipo, para ello haremos un pequeño código donde veremos si connector/J fue cargado exitosamente en nuestro sistema, para ello utilizaremos el siguiente código:

public class PruebaConexion {
		 public static void main(String[] args) {
					 try {

					 Class<?> c = Class.forName("com.mysql.jdbc.Driver");
					 System.out.println("Clase Cargada: " + c.getName());

					 } catch (ClassNotFoundException ex) {
					 System.err.println(ex);
					 }

		 }
}



4- Para ejecutar este ejemplo necesitamos incluir la dependencia, es recomendable que tengamos el .jar en la misma ruta de nuestro archivo PruebaConexion.java. Con esto cubierto pasaremos a compilar nuestro archivo, abrimos una consola y con la instrucción javac y agregando el .jar al classpath en tiempo de ejecución con el comando –cp lo podemos lograr, veamos la línea de comandos:

javac –cp mysql-connector-java-5.1.34-bin.jar PruebaConexion.java



5- Por último para ejecutar nuestro archivo solo necesitamos ejecutar la siguiente instrucción:

java –cp mysql-connector-java-5.1.34-bin.jar PruebaConexion

Si tenemos un resultado como el siguiente en nuestra consola ya podemos empezar a trabajar con operaciones a Bases de Datos:



Estableciendo una conexión


El próximo paso que necesitamos realizar es establecer una conexión efectiva a nuestra Base de Datos, para ello debemos crear una con al menos una tabla en nuestro servidor local, de esta forma podemos realizar algunas pruebas, para facilitar las cosas creamos una Base de Datos llamada test y utilizamos el siguiente script para crear la tabla e insertar unos registros de prueba, esto para acelerar el desarrollo del tutorial:


CREATE TABLE IF NOT EXISTS `usuarios` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`nombre` varchar(255) NOT NULL,
`fecha` date NOT NULL,
`estado` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


INSERT INTO `usuarios` (`id`, `nombre`, `fecha`, `estado`) VALUES
(1, 'Usuario 1', '2015-01-01', 1),
(2, 'Usuario 2', '2015-01-01', 1);


Ahora en el siguiente código de Java nos vamos a enfocar en establecer la conexión con la Base de Datos, para ello con un bloque try catch validaremos que sea efectiva y sin errores, luego si la conexión fue establecida imprimiremos un mensaje de éxito, veamos:

import java.sql.Connection;
import java.sql.DriverManager;

public class PruebaConexion {
		
	 private static final String ruta = "jdbc:mysql://localhost";

private static final String usuario = "nuestro usuario";

private static final String password = "nuestro password";

		 public static void main(String[] args) {

					 try {
		 Connection con = DriverManager.getConnection(ruta, usuario, password);
		 System.out.println("Conexion exitosa");

	 } catch (Exception e) {
		 e.printStackTrace();
	 }


		 }
}


De este código podemos notar que debemos importar dos librerías del paquete java.sql, una es Connection que se encarga de gestionar todas las actividades para poder comunicarnos con la Base de Datos y la otra es DeviceManager que se encarga de proporcionar la forma como nos comunicaremos con la misma. Si hemos seguido los pasos de manera correcta deberíamos ver el siguiente mensaje cuando ejecutamos nuestro ejemplo en la consola:


Realizando consultas


Ya tenemos todo listo para empezar a probar nuestras consultas, para ello vamos a necesitar varias cosas, la primera ya la tenemos que es el objeto que nos hace la conexión a la Base de Datos, luego vamos a necesitar importar los paquetes Statement y ResultSet con los cuales podremos en primer lugar enviar consultas y luego obtener la respuesta de la misma, finalmente recorremos el objeto ResultSet donde mostraremos los datos insertados en la tabla y antes de cerrar el programa tenemos que cerrar cada uno de los objetos que hemos creado, de esta manera garantizaremos la integridad de nuestros datos. Veamos el código que muestra lo explicado:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class PruebaConexion {
		
private static final String ruta = "jdbc:mysql://localhost/test";

private static final String usuario = "nuestro usuario";

private static final String password = "nuestro password";

		 public static void main(String[] args) {
					

					 try {
		 Connection con = DriverManager.getConnection(ruta, usuario, password);
		 Statement consulta = con.createStatement();
		 System.out.println("Conexion exitosa");

								 ResultSet resultado = consulta.executeQuery("SELECT * FROM usuarios");

								 while (resultado.next()) {
											 String nombre = resultado.getString("nombre");							
											 String fecha = resultado.getString("fecha");
											 System.out.println("Nombre: " + nombre + " Fecha Registro:" +fecha);
								 }

		 					 resultado.close();
		 					 consulta.close();
		 					 con.close();
	 } catch (Exception e) {
		 e.printStackTrace();
	 }
	
	

		 }
}


Es importante mencionar que en nuestra atributo ruta lo hemos modificado y se ha agregado luego del localhost el nombre de la Base de Datos llamada test donde debemos tener nuestra tabla usuarios creada, compilamos nuestro archivo y ejecutamos, el resultado por consola sería como se ve en la siguiente imagen:


Los Prepared Statements


Habiendo observado el ejemplo de la conexión y las consultas a la Base de Datos, podemos notar que tenemos que utilizar una figura llamada Prepare Statement que nos facilita el trabajo al dejar consultas preparadas de manera que podamos ejecutarlas múltiples veces sin tener que construirlas una y otra vez, para lograr esta dinámica sustituimos los valores que necesitamos cambiar por variables y luego al ejecutar la consulta le pasamos los valores reales que vamos a utilizar.

Ventajas
Esto tiene varias ventajas, ya dijimos la primera que es poder utilizar algo sin repetirlo, pero también es por seguridad, ya que esto nos permite tratar los valores que posiblemente vengan por ingreso del usuario para evitar un ataque a nuestra Base de Datos, además que también podemos facilitar la legibilidad de nuestro programa.


En el siguiente ejemplo vamos a crear una consulta con Prepared Statement, de forma que esta pueda ser utilizada varias veces durante nuestro programa. Veamos el código resultante:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.PreparedStatement;

public class PreparedStatementPrueba {
		
private static final String ruta = "jdbc:mysql://localhost/test";

private static final String usuario = "nuestro usuario";

private static final String password = "nuestro password";

		 public static void main(String[] args) {

					 try {
		 Connection con = DriverManager.getConnection(ruta, usuario, password);
		 PreparedStatement consulta = con.prepareStatement("SELECT * FROM usuarios Where id = ?;");
		 System.out.println("Conexion exitosa");
		 consulta.setInt(1, 1);
								 ResultSet resultado = consulta.executeQuery();

								 while (resultado.next()) {
											 String nombre = resultado.getString("nombre");							
											 String fecha = resultado.getString("fecha");
											 System.out.println("Nombre: " + nombre + " Fecha Registro:" +fecha);
								 }

		 					 resultado.close();
		 					 consulta.close();
		 					 con.close();
	 } catch (Exception e) {
		 e.printStackTrace();
	 }

		 }
}

Notamos que utilizando el método setInt con el objeto consulta es que podemos pasar el parámetro necesario para la consulta, con ello podemos desligar el mismo de la ejecución del query ganando así en portabilidad y facilidad de lectura. Para finalizar, compilamos y ejecutamos nuestro programa:


Con esto finalizamos este tutorial, como vemos las opciones para trabajar con Bases de Datos en Java son muy interesantes ya que nos permiten incorporar flexibilidad y versatilidad en nuestras aplicaciones, lo más importante es que si tenemos experiencia con otros lenguajes seguramente acá podrá ser aprovechada.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X