Beruflich Dokumente
Kultur Dokumente
Java y Servicios Web I Master en Ingeniera Matemtica Manuel Montenegro Dpto. Sistemas Informticos y Computacin
Desp. 467 (Mat) montenegro@fdi.ucm.es
Bases de datos
Una base de datos (DB) es una coleccin de datos interrelacionados, pertenecientes a un mismo contexto, y almacenados sistemticamente para su posterior uso. Un sistema gestor de bases de datos (DBMS) es un programa que almacena y accede a la informacin contenida en las bases de datos. Una base de datos modela la informacin sobre ciertas entidades, y sobre relaciones entre las mismas.
10. Bases de datos y JDBC 2
29 y 30/Mayo/2012
Contenidos
Bases de datos relacionales Sistemas gestores de bases de datos Acceso a bases de datos Consultas SQL Acceso a bases de datos con JDBC
29 y 30/Mayo/2012
Entidades
Estudiante
Asignatura
29 y 30/Mayo/2012
Entidades
Nombre Apellidos DNI Atributos
Estudiante
Telfonos Fecha Nacimiento Cdigo Nombre
Asignatura
Grupos
Crditos
29 y 30/Mayo/2012
Relaciones
Nombre Apellidos DNI Matriculado
Estudiante
Telfonos Fecha Nacimiento Cdigo Nombre
Asignatura
Grupos
Crditos
29 y 30/Mayo/2012
Relaciones
Nombre Apellidos DNI Matriculado Grupo
Estudiante
Telfonos Fecha Nacimiento Cdigo Nombre
Asignatura
Grupos
Crditos
29 y 30/Mayo/2012
Relaciones
Nombre Apellidos DNI 0..* Matriculado Grupo
Estudiante
Telfonos Fecha Nacimiento Cdigo 0..* Nombre
Asignatura
Crditos
29 y 30/Mayo/2012
El modelo relacional de base de datos es el ms usado en la actualidad. Se basa en la idea de relacin, considerada como un conjunto de tuplas. Cada relacin es una tabla con filas (registros) y columnas (atributos)
10. Bases de datos y JDBC 9
29 y 30/Mayo/2012
Asignatura
Cdigo 101 102 ...
29 y 30/Mayo/2012
Crditos 15 12 ...
10. Bases de datos y JDBC
Matriculado DNI Estudiante 12345673V 12345673V 82122314X ... Cod. Asignatura 101 102 101 ... Grupo A A B ...
29 y 30/Mayo/2012
11
Atomicidad
No podemos tener una lista de nmeros de telfono dentro de una celda de la tabla de estudiantes. No podemos tener una lista de grupos dentro de una celda de la tabla de asignaturas.
29 y 30/Mayo/2012
12
Atomicidad
DNI 12345673V 82122314X ... Nombre Ricardo Luis ... Apellidos Fernndez Aguinaga Daz Castro ... Fecha Nac. 20/04/1980 25/04/1978 ... Telfonos 912421124 617293744 913111564 ...
29 y 30/Mayo/2012
13
Atomicidad
DNI 12345673V 82122314X ... Nombre Ricardo Luis ... Apellidos Fernndez Aguinaga Daz Castro ... Fecha Nac. 20/04/1980 25/04/1978 ... Telfonos 912421124 617293744 913111564 ...
DNI
DNI
Telfono
29 y 30/Mayo/2012
14
Atomicidad
Cdigo 101 102 ... Nombre lgebra Funciones de una variable ... Crditos 15 12 ... Grupos A,B,C A,B,C ...
Cdigo Cdigo 101 102 ... Nombre lgebra Funciones de una variable ... Crditos 15 12 ... 101 101 101 102 102 102 ...
29 y 30/Mayo/2012 10. Bases de datos y JDBC
Grupo A B C A B C ...
15
Estudiante(DNI, Nombre, Apellido, FechaNac) Asignatura(Codigo, Nombre, NumCreditos) Matriculado(DNIEstud, CodigoAsig, Grupo) TieneTlf(DNIEstud, Telefono) TieneGrupo(CodigoAsig, Grupo)
29 y 30/Mayo/2012
16
Claves
Las claves de una tabla es el conjunto de campos que identifican unvocamente a cada registro de la tabla.
Debe tener siempre un valor en cada registro. El valor debe permanecer inalterable. No pueden existir dos registros dentro de la misma tabla con la misma clave.
29 y 30/Mayo/2012
17
Claves
Estudiante(DNI, Nombre, Apellido, FechaNac) Asignatura(Codigo, Nombre, NumCreditos) Matriculado(DNIEstud, CodigoAsig, Grupo) TieneTlf(DNIEstud, Telefono) TieneGrupo(CodigoAsig, Grupo)
29 y 30/Mayo/2012
18
Claves
Estudiante(DNI, Nombre, Apellido, FechaNac) Asignatura(Codigo, Nombre, NumCreditos) Matriculado(DNIEstud, CodigoAsig, Grupo) TieneTlf(DNIEstud, Telefono) TieneGrupo(CodigoAsig, Grupo)
29 y 30/Mayo/2012
19
Contenidos
Bases de datos relacionales Sistemas gestores de bases de datos Acceso a bases de datos Consultas SQL Acceso a bases de datos con JDBC
29 y 30/Mayo/2012
20
29 y 30/Mayo/2012
21
Aplicacin
Consultas Modificaciones
DBMS
Datos
Lenguaje SQL
Programador
29 y 30/Mayo/2012
22
Lenguaje SQL
SQL (Structured Query Language) Es un lenguaje declarativo de acceso a bases de datos relacionales.
DDL (Data definition language) Modificacin de la estructura de la base de datos. Creacin de tablas. DML (Data manipulation language) Consulta, insercin, y eliminacin de registros dentro de una tabla.
29 y 30/Mayo/2012
23
Contenidos
Bases de datos relacionales Sistemas gestores de bases de datos Acceso a bases de datos Consultas SQL Acceso a bases de datos con JDBC
29 y 30/Mayo/2012
24
Aplicacin
Programador
29 y 30/Mayo/2012
25
Herramienta phpMyAdmin
Interfaz web para MySQL. Situada en http://dalila.sip.ucm.es/phpmyadmin Nombre de usuario y contrasea: Pregunta al profesor!
29 y 30/Mayo/2012
26
Herramienta phpMyAdmin
29 y 30/Mayo/2012
27
Crear tablas
29 y 30/Mayo/2012
28
Tipos de datos
29 y 30/Mayo/2012
29 y 30/Mayo/2012
30
Contenidos
Bases de datos relacionales Sistemas gestores de bases de datos Acceso a bases de datos Consultas SQL Acceso a bases de datos con JDBC
29 y 30/Mayo/2012
31
Consultas en SQL
Obtener todas las filas y columnas de una tabla. SELECT * FROM Estudiantes
DNI 12345673V 82122314X 20358182T 29377172M 45219913T 40231491M 23195991S 29918481X Nombre Ricardo Luis Marta Roberto Marta Martn Sandra Francisca Apellidos Fernndez Aguinaga Daz Castro Domnguez Iborra Blanco Rodrigo Daz Agrela Montes Di Cesare Gonzlez de Castro Montes Trujillo FechaNac 1980-04-25 1978-04-15 1975-12-21 1981-12-22 1983-01-20 1979-03-15 1982-11-21 1907-10-19
29 y 30/Mayo/2012
32
Consultas en SQL
Obtener ciertas columnas de una tabla SELECT DNI, Nombre FROM Estudiantes
DNI 12345673V 82122314X 20358182T 29377172M 45219913T 40231491M 23195991S 29918481X Nombre Ricardo Luis Marta Roberto Laura Martn Sandra Francisca
29 y 30/Mayo/2012
33
Consultas en SQL
Imponer condiciones a las filas resultado. SELECT DNI, Nombre, Apellidos FROM Estudiantes WHERE Nombre = 'Marta'
DNI 20358182T 45219913T Nombre Marta Marta Apellidos Domnguez Iborra Daz Agrela
29 y 30/Mayo/2012
34
Consultas en SQL
Imponer condiciones a las filas resultado. SELECT DNI, Nombre, Apellidos FROM Estudiantes WHERE FechaNac >= '1980-01-01' AND FechaNac < '1990-01-01'
DNI 12345673V 29377172M 45219913T 23195991S Nombre Ricardo Roberto Marta Sandra Apellidos Fernndez Aguinaga Blanco Rodrigo Daz Agrela Gonzlez de Castro
29 y 30/Mayo/2012
35
Consultas en SQL
Imponer condiciones a las filas resultado. SELECT DNI, Nombre, Apellidos FROM Estudiantes WHERE FechaNac BETWEEN '1980-01-01' AND '1990-01-01'
DNI 12345673V 29377172M 45219913T 23195991S Nombre Ricardo Roberto Marta Sandra Apellidos Fernndez Aguinaga Blanco Rodrigo Daz Agrela Gonzlez de Castro
29 y 30/Mayo/2012
36
Consultas en SQL
Imponer condiciones a las filas resultado. SELECT DNI, Nombre, Apellidos FROM Estudiantes WHERE Apellidos LIKE 'D%'
29 y 30/Mayo/2012
37
Consultas en SQL
Imponer condiciones a las filas resultado. SELECT DNI, Nombre, Apellidos FROM Estudiantes WHERE Apellidos LIKE 'D%'
29 y 30/Mayo/2012
38
Consultas en SQL
Producto cartesiano
SELECT DNI, Apellidos, DNIEstud, CodigoAsig FROM Estudiantes, Matriculado
Apellidos Fernndez Aguinaga Fernndez Aguinaga Fernndez Aguinaga Fernndez Aguinaga Fernndez Aguinaga Fernndez Aguinaga Daz Castro Daz Castro
29 y 30/Mayo/2012
39
Consultas en SQL
Producto cartesiano
SELECT DNI, Apellidos, DNIEstud, CodigoAsig FROM Estudiantes, Matriculado WHERE DNI = DNIEstud
Apellidos Fernndez Aguinaga Fernndez Aguinaga Fernndez Aguinaga Blanco Rodrigo Blanco Rodrigo Gonzlez de Castro
29 y 30/Mayo/2012
40
Consultas en SQL
Producto cartesiano
SELECT Estudiantes.DNI, Estudiantes.Apellidos, Matriculado.CodigoAsig FROM Estudiantes, Matriculado WHERE Estudiantes.DNI = Matriculado.DNIEstud
DNI 12345673V 12345673V 12345673V 29377172M 29377172M 23195991S Apellidos Fernndez Aguinaga Fernndez Aguinaga Fernndez Aguinaga Blanco Rodrigo Blanco Rodrigo Gonzlez de Castro CodigoAsig 803261 803265 803262 803265 803265 803261
29 y 30/Mayo/2012
41
Consultas en SQL
Uso de funciones
SELECT Estudiantes.DNI, Estudiantes.Apellidos, LENGTH(Asignaturas.Nombre) FROM Estudiantes, Matriculado, Asignaturas WHERE Estudiantes.DNI = Matriculado.DNIEstud AND Asignaturas.Codigo = Matriculado.CodigoAsig
DNI 12345673V 12345673V 12345673V 29377172M 29377172M 23195991S Apellidos Fernndez Aguinaga Fernndez Aguinaga Fernndez Aguinaga Blanco Rodrigo Blanco Rodrigo Gonzlez de Castro LENGTH(Nombre) 41 36 27 41 27 41
29 y 30/Mayo/2012
42
Consultas en SQL
Renombramientos de columnas
SELECT Estudiantes.DNI, Estudiantes.Apellidos, LENGTH(Asignaturas.Nombre) AS Longitud FROM Estudiantes, Matriculado, Asignaturas WHERE Estudiantes.DNI = Matriculado.DNIEstud AND Asignaturas.Codigo = Matriculado.CodigoAsig
DNI 12345673V 12345673V 12345673V 29377172M 29377172M 23195991S Apellidos Fernndez Aguinaga Fernndez Aguinaga Fernndez Aguinaga Blanco Rodrigo Blanco Rodrigo Gonzlez de Castro Longitud 41 36 27 41 27 41
29 y 30/Mayo/2012
43
Funciones de SQL
Cadenas
Fechas/Horas
29 y 30/Mayo/2012
44
Consultas en SQL
Agrupamientos
SELECT DNIEstud, CodigoAsig FROM Matriculado
29 y 30/Mayo/2012
45
Consultas en SQL
Agrupamientos
SELECT COUNT(*) AS NumAls, CodigoAsig FROM Matriculado GROUP BY DNIEstud
NumAls 3 2 1
29 y 30/Mayo/2012
46
Funciones de agrupamiento
29 y 30/Mayo/2012
47
Consultas en SQL
Agrupamientos + Condiciones
SELECT COUNT(*) AS NumAls, CodigoAsig FROM Matriculado GROUP BY DNIEstud HAVING COUNT(*) >= 3
NumAls 3
CodigoAsig 803261
29 y 30/Mayo/2012
48
Inserciones en SQL
INSERT INTO Estudiantes (DNI, Nombre, Apellidos, FechaNac) VALUES ('12314561F', 'Carolina', 'Rodriguez Yage', '1983-05-20')
DNI 12345673V 82122314X 20358182T 29377172M 45219913T 40231491M 23195991S 29918481X 12314561F
Nombre Ricardo Luis Marta Roberto Marta Martn Sandra Francisca Carolina
Apellidos Fernndez Aguinaga Daz Castro Domnguez Iborra Blanco Rodrigo Daz Agrela Montes Di Cesare Gonzlez de Castro Montes Trujillo Rodrguez Yage
FechaNac 1980-04-25 1978-04-15 1975-12-21 1981-12-22 1983-01-20 1979-03-15 1982-11-21 1907-10-19 1983-05-20
29 y 30/Mayo/2012
49
Actualizaciones en SQL
UPDATE Estudiantes SET Nombre='Javier' WHERE DNI='82122314X'
DNI 12345673V 82122314X 20358182T 29377172M 45219913T 40231491M 23195991S 29918481X 12314561F
Nombre Ricardo Javier Marta Roberto Marta Martn Sandra Francisca Carolina
Apellidos Fernndez Aguinaga Daz Castro Domnguez Iborra Blanco Rodrigo Daz Agrela Montes Di Cesare Gonzlez de Castro Montes Trujillo Rodrguez Yage
FechaNac 1980-04-25 1978-04-15 1975-12-21 1981-12-22 1983-01-20 1979-03-15 1982-11-21 1907-10-19 1983-05-20
29 y 30/Mayo/2012
50
DNI 12345673V 82122314X 20358182T 29377172M 45219913T 40231491M 23195991S 29918481X 12314561F
Nombre Ricardo Javier Marta Roberto Marta Martn Sandra Francisca Carolina
Apellidos Fernndez Aguinaga Daz Castro Domnguez Iborra Blanco Rodrigo Daz Agrela Montes Di Cesare Gonzlez de Castro Montes Trujillo Rodrguez Yage
FechaNac 1980-04-25 1978-04-15 1975-12-21 1981-12-22 1983-01-20 1979-03-15 1982-11-21 1907-10-19 1983-05-20
29 y 30/Mayo/2012
51
Contenidos
Bases de datos relacionales Sistemas gestores de bases de datos Acceso a bases de datos Consultas SQL Acceso a bases de datos con JDBC
29 y 30/Mayo/2012
52
JDBC
JDBC: Java Database Connectivity Paquete java.sql API de acceso a bases de datos desde Java. Interfaz independiente del sistema gestor de base de datos (DBMS) que se utilice. Cada DBMS con soporte para JDBC proporciona un driver que implementa esa interfaz. MySQL
http://dev.mysql.com/downloads/connector/j/
29 y 30/Mayo/2012
53
Instalacin
Tools Preferences Pestaa Libraries Botn Add Seleccionar el archivo .jar Tools Reset Java Virtual Machine
29 y 30/Mayo/2012
54
Se utiliza para especificar a qu base de datos acceder, qu driver utilizar, y en qu servidor se encuentra el gestor de bases de datos.
Subprotocolo BD
jdbc:mysql://dalila.sip.ucm.es/AlumnoJSW1
Protocolo Servidor
jdbc:mysql://localhost/AlumnoJSW1
29 y 30/Mayo/2012 10. Bases de datos y JDBC 55
La clase Connection
Sus instancias representan conexiones a una base de datos. Se construye mediante el mtodo esttico getConnection de la clase DriverManager.
29 y 30/Mayo/2012
56
Ejemplo
public class ConsultaSQL { static final String DATABASE_URL = "jdbc:mysql://dalila.sip.ucm.es/AlumnoJSW1"; static final String USER = "AlumnoJSW1"; static final String PASSWORD = "jsw1"; public static void main(String[] args) { Connection con = null; try { con = DriverManager.getConnection( DATABASE_URL, USER, PASSWORD); System.out.println(Conexin creada correctamente); } catch(SQLException e) { e.printStackTrace(); } finally { try { con.close(); } catch (Exception e) { e.printStackTrace(); } } } }
29 y 30/Mayo/2012
57
La clase Statement
Statement createStatement()
Statement st = null; try { con = DriverManager.getConnection(DATABASE_URL, USER, PASSWORD); st = con.createStatement(); } catch(SQLException e) { } finally { try { st.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } }
29 y 30/Mayo/2012 10. Bases de datos y JDBC 58
Ejecutar consultas
Las consultas a la base de datos se realizan mediante el mtodo executeQuery de la clase Statement.
Devuelve un objeto de la clase ResultSet, que permite iterar sobre los resultados de la consulta.
boolean next() int getInt(int indiceCol) int getInt(String nombreCol) String getString(int indiceCol) String getString(String nombreCol) Date getDate(int indiceCol) Date getDate(String nombreCol) void close()
10. Bases de datos y JDBC 59
29 y 30/Mayo/2012
Ejemplo
public class ConsultaSQL { static final String DATABASE_URL = "jdbc:mysql://dalila.sip.ucm.es/AlumnoJSW1"; static final String USER = "AlumnoJSW1"; static final String PASSWORD = "jsw1"; public static void main(String[] args) { Connection con = null; Statement st = null; ResultSet rs = null; try { con = DriverManager.getConnection(DATABASE_URL, USER, PASSWORD); st = con.createStatement(); rs = st.executeQuery( "SELECT DNI, Nombre, Apellidos, FechaNac FROM Estudiantes"); while (rs.next()) { System.out.println("DNI: " + rs.getInt(1)); System.out.println("Nombre: " + rs.getString(2)); System.out.println("Apellidos: " + rs.getString(3)); System.out.println("FechaNac: " + rs.getDate(4)); System.out.println("-----------------------------------------"); }
29 y 30/Mayo/2012 10. Bases de datos y JDBC 60
Ejemplo
} catch(SQLException e) { e.printStackTrace(); } finally { try { rs.close(); st.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } } } }
29 y 30/Mayo/2012
61
Actualizar una BD
Para realizar modificaciones a una tabla de la base de datos (INSERT, UPDATE o DELETE), se utiliza el mtodo executeUpdate de la clase Statement.
29 y 30/Mayo/2012
62
Ejemplo
try { con = DriverManager.getConnection(DATABASE_URL, USER, PASSWORD); st = con.createStatement(); st.executeUpdate("INSERT INTO Estudiantes (DNI, Nombre, Apellidos, FechaNac)" + "VALUES (\'99999999X\', \'Nueva\', \'Persona\', \'20100910\')"); } catch(SQLException e) { e.printStackTrace(); } finally { try { st.close(); con.close(); } catch (Exception e) { e.printStackTrace(); }
INSERT INTO Estudiantes (DNI, Nombre, Apellidos, FechaNac) VALUES ('99999999X', 'Nueva', 'Persona', '20100910')
29 y 30/Mayo/2012
63
Consultas paramtricas
Son consultas con marcadores (placeholders), donde se pueden colocar elementos en tiempo de ejecucin. SELECT Dni, Nombre, Apellidos, FechaNac FROM Estudiantes WHERE DNI = ? Se manejan con los mtodos de la clase PreparedStatement
29 y 30/Mayo/2012
64
Ejemplo
Connection con = null; PreparedStatement pst = null; ResultSet rs = null; Scanner sc = new Scanner(System.in); System.out.print("Dime el nmero de DNI: "); int dni = sc.nextInt(); try { con = DriverManager.getConnection(DATABASE_URL, USER, PASSWORD); pst = con.prepareStatement( "SELECT DNI, Nombre, Apellidos, FechaNac FROM Estudiantes WHERE DNI = ?" ); pst.setInt(1, dni); rs = pst.executeQuery(); if (rs.next()) { System.out.println("DNI: " + rs.getInt(1)); System.out.println("Nombre: " + rs.getString(2)); System.out.println("Apellidos: " + rs.getString(3)); System.out.println("FechaNac: " + rs.getDate(4)); } else { System.out.println("No se han encontrado entradas"); } } catch () { }
29 y 30/Mayo/2012 10. Bases de datos y JDBC 65
Referencias
L. Ullman MySQL. Gua de Aprendizaje. Prentice Hall A. Silberschatz, H. F. Korth, S. Sudarshan Fundamentos de Bases de Datos (5 Edicin) McGraw Hill P. Deitel, H. Deitel Java. How to Program (9th Edition) Cap. 28
29 y 30/Mayo/2012
66