Está en la página 1de 67

BASES DE DATOS

Ingeniería Informática

Matemáticas e Informática
BASES DE DATOS

Acceso a Bases de datos


en Java

DIAPOSITIVA 1
BASES DE DATOS

Contacto con Prof. Alejandro Rodríguez

Email: alejandro.rg@upm.es

DIAPOSITIVA 2
Fase 3: Crear y ejecutar consulta

Ejecutamos resulta pero no manipulamos ResultSet


DIAPOSITIVA 3
Fase 3: Crear y ejecutar consulta

Ver ejemplo – EJ3

DIAPOSITIVA 4
Fase 4: Obtener resultados (I)

Leemos el ResultSet.
DIAPOSITIVA 5
Fase 4: Obtener resultados (I)

Ver ejemplo – EJ4

DIAPOSITIVA 6
Fase 4: Obtener resultados (I)

DIAPOSITIVA 7
Fase 5: Liberar recursos

DIAPOSITIVA 8
Fase 5: Liberar recursos

¿Debemos cerrar la conexión (conn.close) tras cada


consulta? ¿Por qué?

DIAPOSITIVA 9
Fase 5: Liberar recursos

¿Debemos cerrar la conexión (conn.close) tras cada


consulta? ¿Por qué?

No, es ineficiente si se van a ejecutar varias cosas.

DIAPOSITIVA 10
Posibles errores

Errores más comunes:

• Driver no cargado (no se encuentra en classpath).


• Fallo de conexión.
• No existe la base de datos.
• Error de sintaxis en sentencia SQL.
• Errores de permisos.
• Violación reglas integridad referencial.

¿Qué/como debemos comprobar para solucionar cada


error?
DIAPOSITIVA 11
Posibles errores

Cualquier de esos errores producirá una excepción.

En función del tipo de excepción o de los datos que nos


de la misma (códigos de error, por ejemplo) podemos
saber el error concreto.

DIAPOSITIVA 12
Manejo de excepciones

DIAPOSITIVA 13
PreparedStatement

Cada vez que enviamos una consulta al SGBD, éste:

• La analiza sintácticamente (Query Processor)


• Construye un plan para ejecutarla (Query Optimizer)

DIAPOSITIVA 14
PreparedStatement

• Si tenemos un bucle donde repetidamente lanzamos la


misma query con diferentes parámetros es ineficiente
usar la clase Statement.

• Es mejor usar para estas situaciones


PreparedStatement.

• Además evita los ataques por inyección de código SQL


en Java.

DIAPOSITIVA 15
SQL Injection

Fuente: http://bit.ly/1NSAxh1

DIAPOSITIVA 16
SQL Injection

DIAPOSITIVA 17
SQL Injection

Vamos a ver el ejemplo en código:


https://youtu.be/yjNDRhie5p8
DIAPOSITIVA 18
Insert

Insertar varios registros usando PreparedStatement: más


eficiente, evitamos SQL Injection.

DIAPOSITIVA 19
Insert

Ver ejemplo – EJ2_4


DIAPOSITIVA 20
Update (I)

Actualización de registros mediante UPDATE.

DIAPOSITIVA 21
Update (I)

Ver ejemplo – EJ2_5


DIAPOSITIVA 22
Update (II)

¿Qué ocurre? ¿Qué significa ese error?


DIAPOSITIVA 23
Update (II)

Ver ejemplo – EJ2_6


DIAPOSITIVA 24
Delete (I)

¿Qué ocurre? ¿Qué significa ese error?


DIAPOSITIVA 25
Delete (I)

Ver ejemplo – EJ2_7


DIAPOSITIVA 26
Delete (II)

DIAPOSITIVA 27
Delete (II)

Ver ejemplo – EJ2_8


DIAPOSITIVA 28
Que clases y métodos usar

DIAPOSITIVA 29
Clase DatabaseMetaData

DIAPOSITIVA 30
Clase DatabaseMetaData

Ver ejemplo – EJ2_13


DIAPOSITIVA 31
Estructura de tablas

También podemos obtener información de la estructura de


tablas usando la clase ResultSetMetaData.
DIAPOSITIVA 32
Estructura de tablas

Ver ejemplo – EJ2_14


DIAPOSITIVA 33
Funciones de tiempo en Java-SQL (I)

Podemos convertir tipos de fecha en Java a SQL de forma


sencilla. Tenemos los tipos Date, Time y TimeStamp como
básicos.

Info sobre Date y Timestamp: http://stackoverflow.com/questions/409286/should-i-use-


field-datetime-or-timestamp
DIAPOSITIVA 34
Funciones de tiempo en Java-SQL (I)

Ver ejemplo – EJ2_15


DIAPOSITIVA 35
Funciones de tiempo en Java-SQL (II)

DIAPOSITIVA 36
Funciones de tiempo en Java-SQL (II)

Ver ejemplo – EJ2_16


DIAPOSITIVA 37
Funciones de tiempo en Java-SQL (III)

Insertamos fechas usando un PreparedStatement donde


pasamos la fecha con un objeto java.sql.Date

En este ejemplo pasamos directamente la fecha actual.

DIAPOSITIVA 38
Funciones de tiempo en Java-SQL (III)

Ver ejemplo – EJ2_17


DIAPOSITIVA 39
Funciones de tiempo en Java-SQL (IV)

Misma dinámica pero usando una fecha específica tanto


con Date como con Calendar.
DIAPOSITIVA 40
Funciones de tiempo en Java-SQL (IV)

Ver ejemplo – EJ2_18


DIAPOSITIVA 41
Funciones de tiempo en Java-SQL (V)

Comparación de fechas.
DIAPOSITIVA 42
Funciones de tiempo en Java-SQL (V)

Ver ejemplo – EJ2_19


DIAPOSITIVA 43
Ficheros binarios en Java (I)

Modificamos la tabla “actor” para que podamos añadir


ficheros binarios.

Crearemos una nueva columna que acepte el tipo


LONGBLOB (Binary Large Object):

ALTER TABLE `sakila`.`actor` ADD COLUMN `picture`


LONGBLOB NULL AFTER `last_update`;

DIAPOSITIVA 44
Ficheros binarios en Java (I): Enviar

Añadimos el fichero usando FileInputStream.

DIAPOSITIVA 45
Ficheros binarios en Java (I): Enviar

Ver ejemplo – EJ2_20


DIAPOSITIVA 46
Ficheros binarios en Java (II): Obtener

Guardarmos el fichero con FileOutputStream.

DIAPOSITIVA 47
Ficheros binarios en Java (II): Obtener

Ver ejemplo – EJ2_21


DIAPOSITIVA 48
Actualizar BD a través de ResultSet (I)

Actualizamos un registro: UPDATE ROW.


DIAPOSITIVA 49
Actualizar BD a través de ResultSet (I)

Ver ejemplo – EJ2_22


DIAPOSITIVA 50
Actualizar BD a través de ResultSet (II)

Actualizamos un registro: INSERT ROW.


DIAPOSITIVA 51
Actualizar BD a través de ResultSet (II)

Ver ejemplo – EJ2_23


DIAPOSITIVA 52
Actualizar BD a través de ResultSet (III)

Borramos un registro: DELETE ROW.


DIAPOSITIVA 53
Actualizar BD a través de ResultSet (III)

Ver ejemplo – EJ2_24


DIAPOSITIVA 54
Procedimientos almacenados (I)

DIAPOSITIVA 55
Procedimientos almacenados (I)

Dos formas de solucionar el acceso a procedimientos almacenados:

http://stackoverflow.com/questions/986628/cant-execute-a-mysql-
stored-procedure-from-java

DIAPOSITIVA 56
Procedimientos almacenados (I)

Ver ejemplo – EJ2_25


DIAPOSITIVA 57
ArrayList para guardar datos (I)

DIAPOSITIVA 58
ArrayList para guardar datos (I)

Obtenemos los datos y los guardamos en un ArrayList de String y los


imprimimos.

DIAPOSITIVA 59
ArrayList para guardar datos (I)

Ver ejemplo – EJ2_26


DIAPOSITIVA 60
ArrayList para guardar datos (II)

DIAPOSITIVA 61
ArrayList para guardar datos (II)

DIAPOSITIVA 62
ArrayList para guardar datos (II)

Ver ejemplo – EJ2_27


DIAPOSITIVA 63
Escritura en fichero como CSV

Añadimos la opción de CSV.

DIAPOSITIVA 64
Escritura en fichero como CSV

Escribimos los resultados en un fichero.

DIAPOSITIVA 65
Escritura en fichero como CSV

Ver ejemplo – EJ2_28


DIAPOSITIVA 66

También podría gustarte