BASES DE DATOSocw.upm.es/lenguajes-y-sistemas-informaticos/acceso-a... · 2017-03-13 · BASES DE...

Post on 16-Oct-2018

232 views 0 download

Transcript of BASES DE DATOSocw.upm.es/lenguajes-y-sistemas-informaticos/acceso-a... · 2017-03-13 · BASES DE...

BASES DE DATOS

Ingeniería Informática

Matemáticas e Informática

DIAPOSITIVA 1

BASES DE DATOS

Acceso a Bases de datos

en Java

DIAPOSITIVA 2

BASES DE DATOS

Contacto con Prof. Alejandro Rodríguez

Email: alejandro.rg@upm.es

DIAPOSITIVA 3

Fase 3: Crear y ejecutar consulta

Ejecutamos resulta pero no manipulamos ResultSet

DIAPOSITIVA 4

Fase 3: Crear y ejecutar consulta

Ver ejemplo – EJ3

DIAPOSITIVA 5

Fase 4: Obtener resultados (I)

Leemos el ResultSet.

DIAPOSITIVA 6

Fase 4: Obtener resultados (I)

Ver ejemplo – EJ4

DIAPOSITIVA 7

Fase 4: Obtener resultados (I)

DIAPOSITIVA 8

Fase 5: Liberar recursos

DIAPOSITIVA 9

Fase 5: Liberar recursos

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

consulta? ¿Por qué?

DIAPOSITIVA 10

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 11

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 12

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 13

Manejo de excepciones

DIAPOSITIVA 14

PreparedStatement

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

• La analiza sintácticamente (Query Processor)

• Construye un plan para ejecutarla (Query Optimizer)

DIAPOSITIVA 15

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 16

SQL Injection

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

DIAPOSITIVA 17

SQL Injection

DIAPOSITIVA 18

SQL Injection

Vamos a ver el ejemplo en código:

https://youtu.be/yjNDRhie5p8

DIAPOSITIVA 19

Insert

Insertar varios registros usando PreparedStatement: más

eficiente, evitamos SQL Injection.

DIAPOSITIVA 20

Insert

Ver ejemplo – EJ2_4

DIAPOSITIVA 21

Update (I)

Actualización de registros mediante UPDATE.

DIAPOSITIVA 22

Update (I)

Ver ejemplo – EJ2_5

DIAPOSITIVA 23

Update (II)

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

DIAPOSITIVA 24

Update (II)

Ver ejemplo – EJ2_6

DIAPOSITIVA 25

Delete (I)

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

DIAPOSITIVA 26

Delete (I)

Ver ejemplo – EJ2_7

DIAPOSITIVA 27

Delete (II)

DIAPOSITIVA 28

Delete (II)

Ver ejemplo – EJ2_8

DIAPOSITIVA 29

Que clases y métodos usar

DIAPOSITIVA 30

Clase DatabaseMetaData

DIAPOSITIVA 31

Clase DatabaseMetaData

Ver ejemplo – EJ2_13

DIAPOSITIVA 32

Estructura de tablas

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

tablas usando la clase ResultSetMetaData.

DIAPOSITIVA 33

Estructura de tablas

Ver ejemplo – EJ2_14

DIAPOSITIVA 35

Funciones de tiempo en Java-SQL (I)

Ver ejemplo – EJ2_15

DIAPOSITIVA 36

Funciones de tiempo en Java-SQL (II)

DIAPOSITIVA 37

Funciones de tiempo en Java-SQL (II)

Ver ejemplo – EJ2_16

DIAPOSITIVA 38

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 39

Funciones de tiempo en Java-SQL (III)

Ver ejemplo – EJ2_17

DIAPOSITIVA 40

Funciones de tiempo en Java-SQL (IV)

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

con Date como con Calendar.

DIAPOSITIVA 41

Funciones de tiempo en Java-SQL (IV)

Ver ejemplo – EJ2_18

DIAPOSITIVA 42

Funciones de tiempo en Java-SQL (V)

Comparación de fechas.

DIAPOSITIVA 43

Funciones de tiempo en Java-SQL (V)

Ver ejemplo – EJ2_19

DIAPOSITIVA 44

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 45

Ficheros binarios en Java (I): Enviar

Añadimos el fichero usando FileInputStream.

DIAPOSITIVA 46

Ficheros binarios en Java (I): Enviar

Ver ejemplo – EJ2_20

DIAPOSITIVA 47

Ficheros binarios en Java (II): Obtener

Guardarmos el fichero con FileOutputStream.

DIAPOSITIVA 48

Ficheros binarios en Java (II): Obtener

Ver ejemplo – EJ2_21

DIAPOSITIVA 49

Actualizar BD a través de ResultSet (I)

Actualizamos un registro: UPDATE ROW.

DIAPOSITIVA 50

Actualizar BD a través de ResultSet (I)

Ver ejemplo – EJ2_22

DIAPOSITIVA 51

Actualizar BD a través de ResultSet (II)

Actualizamos un registro: INSERT ROW.

DIAPOSITIVA 52

Actualizar BD a través de ResultSet (II)

Ver ejemplo – EJ2_23

DIAPOSITIVA 53

Actualizar BD a través de ResultSet (III)

Borramos un registro: DELETE ROW.

DIAPOSITIVA 54

Actualizar BD a través de ResultSet (III)

Ver ejemplo – EJ2_24

DIAPOSITIVA 55

Procedimientos almacenados (I)

DIAPOSITIVA 56

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 57

Procedimientos almacenados (I)

Ver ejemplo – EJ2_25

DIAPOSITIVA 58

ArrayList para guardar datos (I)

DIAPOSITIVA 59

ArrayList para guardar datos (I)

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

imprimimos.

DIAPOSITIVA 60

ArrayList para guardar datos (I)

Ver ejemplo – EJ2_26

DIAPOSITIVA 61

ArrayList para guardar datos (II)

DIAPOSITIVA 62

ArrayList para guardar datos (II)

DIAPOSITIVA 63

ArrayList para guardar datos (II)

Ver ejemplo – EJ2_27

DIAPOSITIVA 64

Escritura en fichero como CSV

Añadimos la opción de CSV.

DIAPOSITIVA 65

Escritura en fichero como CSV

Escribimos los resultados en un fichero.

DIAPOSITIVA 66

Escritura en fichero como CSV

Ver ejemplo – EJ2_28