Sunteți pe pagina 1din 29

PROGRAMACIÓN DE JAVA 2 ENTERPRISE EDITION

ACCESO A BASES DE DATOS CON EL API JDBC

Óscar Belmonte Fernández & Carlos Granell Canut

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


Introducción.

Una vez que nuestras aplicaciones han alcanzado cierto


desarrollo se hace imprescindible almacenar los datos resultado
de la ejecución de la aplicación. En cursos pasados has
aprendido a utilizar ficheros como primer paso para hacer tus
datos persistentes.

La principal desventaja del uso de ficheros es que la información


que existe en ellos no se puede «relacionar» entre si. A partir de
esta necesidad nacen los gestores de bases de datos.

El objetivo de este capítulo es que seas capaz de escribir


programas en Java que accedan a una base de datos para su
gestión (creación de tablas; inserción, borrado y actualización de
registros, búsquedas, etcétera).

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


Esquema

1.Trabajar con MySQL.


2.Pasos para trabajar con BD desde Java.
3.Las categorías de controladores.
4.Realizar consultas a la BD.
5.Procesar el resultado de la consulta.
6.El patrón de diseño Modelo/Vista/Controlador y el trabajo con BD.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


1.Trabajar con MySQL.

Necesitamos un Sistema Gestor de Bases de Datos (SGBD).


En nuestro caso vamos a utilizar MySQL, lo puedes encontrar en:
http://www.mysql.org
Ya está instalado en las máquinas del aula.
Vamos a utilizar una interfaz gráfica para trabajar con MySQL.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


1.Trabajar con MySQL.

Primero vamos a crear un nuevo usuario en MySQL:

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


1.Trabajar con MySQL.

Primero vamos a crear un nuevo usuario en MySQL:

Desde donde
puede acceder

Para crear un
nuevo usuario

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


1.Trabajar con MySQL.

Ahora vamos a crear la Base de Datos:

Para añadir
una nuva
base de datos

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


1.Trabajar con MySQL.

Finalmente asignamos los permisos al usuario sobre la BD:

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


1.Trabajar con MySQL.

Ahora vamos a crear las tablas y poblarlas, para ello utilizaremos la


herramienta de queries de MySQL:

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


1.Trabajar con MySQL.

Para crear y poblar las tablas vamos a utilizar los ficheros que te
has descargado desde la página web:

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


1.Trabajar con MySQL.

En las solapa de «Query» puedes hacer consultas.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


2. Pasos para trabajar con BD desde Java

Para conectarnos a un gestor de BD desde Java necesitamos el


driver específico del gestor de BD. Para MySQL este driver lo
podemos encontrar en:
http://dev.mysql.com/downloads/connector/j/5.0.html

Los drivers disponibles para otros gestores de BD los puedes


encontrar en: http://developers.sun.com/product/jdbc/drivers

java.sql.*;
SGBD
class BD { Driver
private...

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


2. Pasos para trabajar con BD desde Java

Estos son los pasos que siempre darás al acceder a


BD desde Java:

1º. Cargar el driver.


2º. Definir la conexión a través de una URL.
3º. Establecer la conexión.
4º. Crear un objeto Statement.
5º. Ejecutar la petición.
6º. Procesar el resultado.
7º. Cerrar la conexión.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


2. Pasos para trabajar con BD desde Java

1º. Cargar el driver.

try {
Class.forName("com.mysql.jdbc.Driver");
Class.forName("connect.microsoft.MicrosoftDriver");
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch ( ClassNotFoundException e) {
System.out.println("Error loading driver: " + e);
}

Fíjate que podemos cargar varios drivers para


conectarnos a varios SGBD.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


2. Pasos para trabajar con BD desde Java

2º. Definir la conexión a través de una


URL.
String host = "localhost";
int puerto = 3306;
String db = "supermercado";
String url = "jdbc:mysql://" + host + ":" +port + "/" + db;
Depende del SGBD

Por defecto al instalar MySQL utiliza el puerto 3306

En este caso la url final es:


jdbc:mysql://localhost:3306/supermercado

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


2. Pasos para trabajar con BD desde Java

3º. Establecer la
conexión.

String usuario = "usuario";


String clave = "usuario";
Connection conexion =
DriverManager.getConnection(url, usuario, clave);

Crear una conexión a una BD es una operación costosa.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


2. Pasos para trabajar con BD desde Java

4º. Crear un objeto Statement.

Statement sentencia = conexion.createStatement();

Es el objeto Connection el que nos


devuelve un Statement.
Podemos utilizar el mismo objeto para
hacer varias peticiones.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


2. Pasos para trabajar con BD desde Java

5º. Ejecutar la petición.

String peticion = "SELECT * FROM unaTabla";


ResultSet resultado = sentencia.executeQuery(peticion);
// o bien
String peticion = “INSERT INTO unaTabla VALUE...”;
ResultSet resultado = sentencia.updateQuery(peticion);

La primera sirve para hacer consultas, la segunda para


modificar la BD.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


2. Pasos para trabajar con BD desde Java

6º. Procesar el resultado.


while(resultado.next()) {
System.out.println(resultado.getString(1) + " " +
resultado.getInt(2) + " " +
resultado.getDouble(3));
}

A tener en cuenta:
A) Antes de empezar a procesar el resultado siempre hacer next().
B) La primera columna es '1' no '0'.
C) Hay un método getTIPO(columna) para cada tipo de datos.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


2. Pasos para trabajar con BD desde Java

JDBC Type Java Type JDBC Type Java Type


BIT boolean NUMERIC BigDecimal
TINYINT byte DECIMAL
SMALLINT short DATE java.sql.Date
INTEGER int TIME java.sql.TimeStamp
BIGINT long TIMESTAMP
REAL float CLOB Clob
FLOAT double BLOB Blob
DOUBLE ARRAY Array
BINARY byte[] DISTINCT mapping of the underlaying type
VARBINARY STRUCT Struct
LONGVARBINARY REF Ref
CHAR String JAVA_OBJECT Underlaying Javaclass
VARCHAR
LONGVARCHAR

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


2. Pasos para trabajar con BD desde Java

7º. Cerrar la
conexión.

sentencia.close();
conexion.close();

Se supone que al cerrar una conexión se cierran


todas las sentencias asociadas, pero puede haber
errores en los drivers, de modo que se aconseja
cerrar las sentencias explicitamente.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


2. Pasos para trabajar con BD desde Java

Ejercicio:

Vamos a probar todo lo aprendido con un ejemplo:


!Instala el driver JDBC para MySQL.

!Los siete pasos para trabajar con BD.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


3. Las categorías de controladores

Tipo 1 (Bridge): Combinación de Java y SO. Se accede a ODBC.


Tipo 2 (Native): Combinación de Java y SO. Se accede a través de
código del distribuidor de la BD.
Tipo 3 (Network): Middleware de red y Java.
Tipo 4 (Thin): 100% Java, no depende del SO.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


4. Realizar consultas

Podemos hacer dos tipos de consultas:


Consultas propiamente dichas:
String consulta = “SELECT * FROM producto;”
sentencia.executeQuery(consulta);
nos devuelve un ResultSet.

Actualizaciones de la BD:
String actualizacion = "INSERT INTO producto
VALUES('Lechuga', 'Vegetales', '0.60', NULL);";
int nRegistros = sentencia.executeUpdate(actualizacion);
System.out.println("Insertado(s) " + nRegistros + "registros.");
Nos devuelve el número de registro afectados.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


4. Realizar consultas

Frecuentemente, realizamos la misma consulta cambiando


únicamente los parámetros de esta:

String consulta = “SELECT * FROM producto WHERE Id=`3`”;


sentencia.executeQuery(consulta);
consulta = “SELECT *FROM producto WHERE Id=`4`”;
sentencia.executeQuery(consulta);

En estos casos es más eficiente utilizar objetos PreparedStatement:


String consulta = “SELECT * FROM producto WHERE Id = ?”;
PreparedStatement sentencia = conexion.prepareStatement(consulta);
sentencia.setInt(1, 3);
sentencia.executeQuery();
sentencia.setInt(1, 4);
sentencia.executeQuery();

Los PreparedStatement están precompilados, y su ejecución es rápida

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


5. Procesar el resultado de la consulta

while(resultado.next()) {
System.out.println(resultado.getString(1) + " " +
resultado.getInt(2) + " " +
resultado.getDouble(3));
}

Además de procesar el resultado de la consulta del modo anterior,


podemos obtener más información del resultado de la consulta a
través de la clase ResultSetMetaData:

ResultSetMetaData metaData = resultado.getMetaData();

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


5. Procesar el resultado de la consulta

// Para saber el número de columnas


int nColumnas = metaData.getColumnCount();
for(int i = 1; i <= nColumnas; i++) {
// Para saber el nombre de la columnas
String nombreColumna = metaData.getColumnName(i);
// Para saber el tipo de datos de la columna java.sql.Types
String tipo = metaData.getColumnType(i);
// El numero de columnas para mostrar el dato
int displaySize = metaData.getColumnDisplaySize(i);
// El numero de posiciones antes del punto decimal
int precision = metaData.getPrecision(i);
// El numero de posiciones después del punto decimal
int escala = metaData.getScale(i);
}

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


6. El patrón de diseño MVC y el trabajo con BD

java.sql.*;

class BD {
private...
Cambia tu estado
El usuario hizo algo

Controlador
SGBD
Cambia aspecto

Vista Necesito info de tu estado Modelo


He cambiado

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE


6. El patrón de diseño MVC y el trabajo con BD

Ejercicio:

Vas a programar una sencilla interfaz gráfica para consultar los


productos de la BBDD supermercado.

Óscar Belmonte Fernández & Carlos Granell Canut Programación de J2EE

S-ar putea să vă placă și