SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
Federico Peinado
www.federicopeinado.es
Depto. de Ingeniería del Software e
Inteligencia Artificial
disia.fdi.ucm.es
Facultad de Informática
www.fdi.ucm.es
Universidad Complutense de Madrid
www.ucm.es
 Base de datos (BBDD)
• Conjunto de información organizada de forma independiente a su
tratamiento y a los detalles de su almacenamiento físico
 Modelo de datos
• Estructura lógica de los datos y conjunto de operaciones que
permiten crearlos, consultarlos y modificarlos
• El más utilizado es el relacional (datos organizados en tablas)
 Lenguaje de acceso
• El más utilizado es SQL (creación, consulta y modificación de
BBDD relacionales)
 Sistema gestor de bases de datos (SGBD)
• Aplicación para crear, mantener y consultar BBDD
• El código de las aplicaciones que usan BBDD no debería depender
de los detalles particulares de los SGBDs
 Necesidad de algún API estándar para conectar con SGBDs
2
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 Existen muchas, habitualmente cada proveedor de
SGBDs ofrece una propia para acceder a sus BBDD
 Protocolos propietarios
• Dependen del proveedor del SGBD
• Dependen del lenguaje de programación que se quiera utilizar
 Plataforma Microsoft
• ODBC (Open DataBase Connectivity)
 Protocolo de conexión basado en parte del estándar SQL/CLI (API en C)
• OLE/ADO DB
• ADO .NET
• ADO .NET + LINQ
 Plataforma Java
• JDBC (Java DataBase Connectivity)
3
Laboratorio de Programación de Sistemas – Acceso a bases de datos
4
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 Paquete Java ubicado en java.sql
• Versiones 1.0, 2.0, 3.0 y 4.0
(la actual, ya incluida en el JDK 6)
• Proporciona una pasarela JDBC  ODBC
 Mecanismos básicos
1. Conectarse a una fuente de datos
 Para ello la fuente de datos debe incluir un driver JDBC
(u ODBC, necesitando entonces usar la pasarela)
2. Consultar/cambiar tablas en las BBDD de la fuente
 Se usa SQL “embebido” en los parámetros (Strings) de
ciertos métodos definidos en las clases de este paquete
 El resultado son objetos Java, definidos en el paquete
5
Laboratorio de Programación de Sistemas – Acceso a bases de datos
Cliente BD  Servidor BD  BD
• El cliente no necesita saber nada sobre como
funcionan los controladores de BBDD
 Programación independiente de la plataforma
• JDBC tiene dos capas
1. API de JDBC
2. API del Administrador de Controladores JDBC
 Los distribuidores de BBDD deben construir sus
controladores (drivers) siguiendo los requisitos de
esta segunda API
6
Laboratorio de Programación de Sistemas – Acceso a bases de datos
Debido a su diseño, los programadores
sólo necesitan conocer la capa Java/JDBC
Esquema de comunicación
(entre JDBC y una base de datos)
• Aplicación Java  Administrador de
Controladores de JDBC 
1.  Pasarela JDBC/ODBC  Controlador ODBC 
Base de datos
2.  Controlador JDBC suministrado por el fabricante
 Base de datos
7
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 Controlador Tipo 1
• Traduce JDBC a ODBC y utiliza el controlador ODBC
para comunicar con la base de datos
• Oracle incluye uno de estos controladores en el JDK:
la pasarela JDBC/ODBC
• Requiere la configuración específica de un
controlador ODBC…
 Controlador Tipo 2
• Escrito parcialmente en Java y en código nativo
• Comunica la API del cliente con la base de datos
• Requiere instalación previa de software específico de
la plataforma junto con una librería Java asociada…
8
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 Controlador Tipo 3
• Librería cliente de Java puro
• Usa protocolo independiente de la BD para enviar
peticiones al servidor (y luego éste traduce)
 Controlador Tipo 4
• Librería de Java puro
• Traduce peticiones JDBC a un protocolo de base
de datos específico
 Las distribuidores de bases de datos más
habituales suministran controladores tipo 3 ó
4 con sus productos
• Otras compañías también los desarrollan
• Estudiaremos cómo utilizar los de tipo 1 y 3
9
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 Hay varias alternativas, cada una con sus requisitos
 Oracle
• Añadir librería con el controlador al proyecto
 ojdbc14_g.jar (Oracle Instant Client)
 MySQL
• Añadir librería con el controlador al proyecto
 mysql-connector-java-xx.jar (MySQL Connector/J)
 Access
• Configurar el controlador ODBC para poder acceder a la
base de datos (nombreControlador)
1. Panel de Control  Herramientas administrativas  Orígenes de
datos (ODBC)  ODBC Data Source Administrator
2. Añadir [Microsoft Access Driver (*.mdb)]
3. Seleccionar base de datos
10
Laboratorio de Programación de Sistemas – Acceso a bases de datos
En el programa
• Registrar el controlador cargando su clase
 System.setProperty(“jdbc.drivers”, driver);
 Se pueden registrar varios drivers separados por “:”
 Class.forName(String driver)
 Registro manual
• Ejemplos
 sun.jdbc.odbc.JdbcOdbcDriver
 oracle.jdbc.driver.OracleDriver
11
Laboratorio de Programación de Sistemas – Acceso a bases de datos
Para conectar con la base de datos hay que
especificar la fuente de datos mediante una
sintaxis similar a una URL
• jdbc:nombreSubprotocolo:otrosElementos
 nombreSubprotocolo selecciona el controlador concreto
 otrosElementos depende del subprotocolo
• Ejemplos
 jdbc:oracle:thin:@ipServidor:puerto:nombreBD
 jdbc:odbc:nombreControlador
12
Laboratorio de Programación de Sistemas – Acceso a bases de datos
ODBC
• Connection conn =
DriverManager.getConnection(String url)
Oracle
• Connection conn = DriverManager.getConnection
(String url, String user, String password)
conn.close()
• Cierra la conexión
• Es necesario cerrar las conexiones una vez que se
han terminado de utilizar para liberar recursos
(tanto en la aplicación como en el servidor)
13
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 Usa archivos de configuración (tipo Properties)
• Fichero database.properties
 jdbc.drivers, jdbc.url, jdbc.username,
jdbc.password
• Ejemplo Oracle
 jdbc.drivers=oracle.jdbc.driver.OracleDriver
 jdbc.url=jdbc:oracle:thin:@localhost:1521:test
 jdbc.username=test
 jdbc.password=test
• Ejemplo Access
 jdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver
 jdbc.url=jdbc:odbc:TEST
 jdbc.username=
 jdbc.password=
14
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 Primero, hay que crear un objeto Statement
(sentencia SQL)
• Statement stmt = conn.createStatement ();
 Después podemos hacer consultas
• ResultSet executeQuery(String sql)
 Realiza“select”
 Devuelve los registros en un ResultSet
• int executeUpdate(String sql)
 Realiza “insert, update, delete, create, drop…”
 Devuelve num de registros afectados de o a 1
• boolean execute(String sql)
• El modo “auto-commit” funciona por defecto, es decir, cada
sentencia se ejecuta dentro de una única transacción
15
Laboratorio de Programación de Sistemas – Acceso a bases de datos
java.sql.ResultSet
• Tabla de resultados por filas
• cursor entre filas, inicialmente antes de la primera
• boolean next()
 Pasa el cursor a la siguiente fila
 false, si se llega al final de la tabla
 true, caso contrario
• Tipo getTipo(int numColumna)
• Tipo getTipo(String nombreColumna)
16
Laboratorio de Programación de Sistemas – Acceso a bases de datos
/**
* Tabla "Prueba" con columna "cadena" de tipo VARCHAR.
* Seleccionar las columnas de la tabla prueba
*/
ResultSet rset = stmt.executeQuery ("SELECT * FROM
Prueba");
/**
* Iterar a lo largo de la tabla obtenida,
* imprimiendo las tuplas
*/
while (rset.next ()){
System.out.println (rset.getString (1));
//System.out.println (rset.getString ("cadena"));
}
// Liberación de recursos, tanto ResultSet como Connection
rset.close();
stmt.close();
17
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 Información sobre objetos java.sql.ResultSet
• Interfaz java.sql.ResultSetMetaData
 getColumCount() numColumnas  1..n
 getColumnName(i), getColumTypeName(i)
 Información sobre tablas de usuario
DatabaseMetaData dbmd = conn.getMetaData();
// MySQL, Access y HSQLDB
ResultSet rs = dbmd.getTables( null, null,
null, new
String[]{"TABLE"});
// Oracle
ResultSet rs = dbmd.getTables( null,
"NombreUsuario",
null, new
String[]{"TABLE"});
18
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 En lugar de construir una sentencia cada vez que el
usuario lanza una consulta, se puede preparar una
vez y usarla muchas veces
• Se gana en rendimiento ya que el servidor puede “cachear”
el plan de ejecución de la consulta
• Se gana en seguridad ya que los drivers habitualmente se
encargan de procesar los parámetros de la consulta
preparada para evitar ataques del tipo “SQL Injection”
String consulta = "SELECT precio FROM libros
WHERE autor = ?";
PreparedStatement stmtCP =
conn.prepareStatement(consulta);
stmtCP.setString(1, "Pepe");
ResultSet rs = stmtCP.executeQuery();
19
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 Para moverse hacia adelante y hacia atrás a
través de los datos, e incluso, saltar a una
posición concreta del conjunto de resultados
• Statement stat =
conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY)
• ResultSet rs = stat.executeQuery(query);
 rs.previous()  fila anterior
 rs.relative(n)  incremento relativo
 rs.absolute(n)  posición n
 int n = rs.getRow()  fila actual
20
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 Se pueden actualizar los datos obtenidos con
executeQuery
• Statement stat =
conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE)
• ResultSet rs = stat.executeQuery(query);
 double precio = rs.getDouble("precio");
rs.updateDouble("precio", precio + incremento);
 rs.updateRow();  actualiza la base de datos
 rs.deleteRow();  borra la fila actual de la base de datos
 rs.insertRow();  inserta una fila
21
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 Las conexiones a la BBDD son "costosas"
• Cliente: El driver reserva una cantidad de memoria (a veces > 1
MB) para gestionar una conexión... además tiene que realizar
cierto trabajo para obtener la conexión
• Servidor: El número de conexiones está limitado  existe un
número máximo de conexiones permitidas
 Un programa sencillo establece una única conexión al
comienzo del mismo y la cierra cuando termina
• Demasiado costoso con múltiples consultas
 Las conexiones están pensadas para ser utilizadas por
múltiples consultas
• Hay que utilizar una conexión para cada grupo de consultas
• No hay que tener una única conexión permanente abierta
 En las aplicaciones reales se suele utilizar un "pool" de
conexiones para optimizar y gestionar adecuadamente
las conexiones de BBDD
22
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 La POO a veces necesita persistencia
 ¿Qué tipo de datos haríamos persistentes?
• Objetos
 Sería muy directo y útil
 Las SGBDOO no están maduras, hay estándares pobres, etc.
• Tablas (modelo relacional)
 Hay SGBDs variados (pero necesitan desacoplamiento)
 Las operaciones son siempre las mismas (hay uniformidad)
 Solución: ORM (Object/Relational Mapping)
• Realiza la conversión de objetos (Java,
principalmente) a tablas (datos en modelo relacional)
• Transparente, automático, independiente de SGBD
(portable), aumenta productividad, etc.
23
Laboratorio de Programación de Sistemas – Acceso a bases de datos
 Un armazón (framework) software es un conjunto de
clases que proporciona funcionalidad genérica para
solucionar un problema
• No son solo librerías, imponen el flujo de control del programa
• Se especializan/generalizan/personalizan según el problema particular
 Algunos armazones para hacer ORM
• Hibernate
https://www.hibernate.org
• Apache iBATIS
http://ibatis.apache.org
• Entreprise JavaBeans
http://java.sun.com/products/ejb
• iPersist
http://ipersist.sourceforge.net
• Apache Cayenne
http://cayenne.apache.org
24
Laboratorio de Programación de Sistemas – Acceso a bases de datos
Federico Peinado
www.federicopeinado.es

Más contenido relacionado

La actualidad más candente (19)

Tres gestores de bases de datos
Tres gestores de bases de datosTres gestores de bases de datos
Tres gestores de bases de datos
 
JDBC
JDBCJDBC
JDBC
 
Comparacion de Gestores de Base de Datos
Comparacion de Gestores de Base de DatosComparacion de Gestores de Base de Datos
Comparacion de Gestores de Base de Datos
 
Cuadro Comparativo
Cuadro ComparativoCuadro Comparativo
Cuadro Comparativo
 
Sgbd
SgbdSgbd
Sgbd
 
Jdbc
JdbcJdbc
Jdbc
 
Jdbc
JdbcJdbc
Jdbc
 
Gestor de Base de Datos
Gestor de Base de DatosGestor de Base de Datos
Gestor de Base de Datos
 
Abf leccion 06
Abf leccion 06Abf leccion 06
Abf leccion 06
 
Cuadro comp
Cuadro compCuadro comp
Cuadro comp
 
Guia de-estudio-oracle-11-g-pdf
Guia de-estudio-oracle-11-g-pdfGuia de-estudio-oracle-11-g-pdf
Guia de-estudio-oracle-11-g-pdf
 
Cuadro comparativo sgbd
Cuadro comparativo sgbdCuadro comparativo sgbd
Cuadro comparativo sgbd
 
Web cast de optimización Sql Server - Arquitectura
Web cast de optimización Sql Server - ArquitecturaWeb cast de optimización Sql Server - Arquitectura
Web cast de optimización Sql Server - Arquitectura
 
Universal databes DB2
Universal databes DB2Universal databes DB2
Universal databes DB2
 
ANSI SQL
ANSI SQLANSI SQL
ANSI SQL
 
Apache Derby
Apache DerbyApache Derby
Apache Derby
 
Comparacion entre my sql y sql server
Comparacion entre my sql y sql serverComparacion entre my sql y sql server
Comparacion entre my sql y sql server
 
Taller de Base de Datos - Unidad 6 SQL procedural
Taller de Base de Datos - Unidad 6 SQL proceduralTaller de Base de Datos - Unidad 6 SQL procedural
Taller de Base de Datos - Unidad 6 SQL procedural
 
Cuadros comparativos
Cuadros comparativosCuadros comparativos
Cuadros comparativos
 

Similar a Lps 18 basesdedatos

JDBC Laboratorio de Programación II
JDBC Laboratorio de Programación IIJDBC Laboratorio de Programación II
JDBC Laboratorio de Programación IIDIANA TAPIA VERA
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...José Antonio Sandoval Acosta
 
Presentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Presentación Taller Herramientas Rendimiento DB2 en IBM i y GenexusPresentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Presentación Taller Herramientas Rendimiento DB2 en IBM i y GenexusXavier Espinoza
 
Conexion bd en java y api necesaria
Conexion bd en java y api necesariaConexion bd en java y api necesaria
Conexion bd en java y api necesariaBoris Salleg
 
Trabajo de sistemas de informacion
Trabajo de sistemas de informacionTrabajo de sistemas de informacion
Trabajo de sistemas de informacionEvelin Oña
 
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...Franklin Parrales Bravo
 
Obvios herramientas de un SGDB
Obvios herramientas de un SGDBObvios herramientas de un SGDB
Obvios herramientas de un SGDBliras loca
 

Similar a Lps 18 basesdedatos (20)

Jdbc
JdbcJdbc
Jdbc
 
Jdbc
JdbcJdbc
Jdbc
 
JDBC Laboratorio de Programación II
JDBC Laboratorio de Programación IIJDBC Laboratorio de Programación II
JDBC Laboratorio de Programación II
 
Ado.net
Ado.netAdo.net
Ado.net
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
 
Base De Datos
Base De DatosBase De Datos
Base De Datos
 
Presentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Presentación Taller Herramientas Rendimiento DB2 en IBM i y GenexusPresentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
Presentación Taller Herramientas Rendimiento DB2 en IBM i y Genexus
 
Conexion bd en java y api necesaria
Conexion bd en java y api necesariaConexion bd en java y api necesaria
Conexion bd en java y api necesaria
 
JDBC(conjunto de clases e interfaces)
JDBC(conjunto de clases e interfaces)JDBC(conjunto de clases e interfaces)
JDBC(conjunto de clases e interfaces)
 
Trabajo de sistemas de informacion
Trabajo de sistemas de informacionTrabajo de sistemas de informacion
Trabajo de sistemas de informacion
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
Jdbc Mysql
Jdbc MysqlJdbc Mysql
Jdbc Mysql
 
Introduccion Java.ppt
Introduccion Java.pptIntroduccion Java.ppt
Introduccion Java.ppt
 
S8-POO-4.2 BDD
S8-POO-4.2 BDDS8-POO-4.2 BDD
S8-POO-4.2 BDD
 
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
POE Unidad 3: Aplicaciones visuales orientadas a eventos con acceso a base de...
 
Obvios herramientas de un SGDB
Obvios herramientas de un SGDBObvios herramientas de un SGDB
Obvios herramientas de un SGDB
 
T2 - JDBC
T2 - JDBCT2 - JDBC
T2 - JDBC
 
Tarea 1 bd
Tarea 1 bdTarea 1 bd
Tarea 1 bd
 
SEMINARIO: ACCESO A BASE DE DATOS CON JDBC
SEMINARIO: ACCESO A BASE DE DATOS CON JDBCSEMINARIO: ACCESO A BASE DE DATOS CON JDBC
SEMINARIO: ACCESO A BASE DE DATOS CON JDBC
 
S8-BDD
S8-BDDS8-BDD
S8-BDD
 

Último

MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxcalzadillasluis134
 
Delitos informáticos en Slideshare.pptx
Delitos informáticos en  Slideshare.pptxDelitos informáticos en  Slideshare.pptx
Delitos informáticos en Slideshare.pptxmaykolmagallanes012
 
Webinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdfWebinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdfAnaRosaMontenegro
 
Se realiza instalacion y configuraacion servicios Windows
Se realiza instalacion y configuraacion servicios WindowsSe realiza instalacion y configuraacion servicios Windows
Se realiza instalacion y configuraacion servicios WindowsCZSOTEC
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOELIAMARYTOVARFLOREZD
 
Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.CZSOTEC
 
SQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptxSQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptxRAMIROANTONIOGALINDO
 

Último (7)

MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
 
Delitos informáticos en Slideshare.pptx
Delitos informáticos en  Slideshare.pptxDelitos informáticos en  Slideshare.pptx
Delitos informáticos en Slideshare.pptx
 
Webinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdfWebinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdf
 
Se realiza instalacion y configuraacion servicios Windows
Se realiza instalacion y configuraacion servicios WindowsSe realiza instalacion y configuraacion servicios Windows
Se realiza instalacion y configuraacion servicios Windows
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
 
Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.
 
SQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptxSQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptx
 

Lps 18 basesdedatos

  • 1. Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es
  • 2.  Base de datos (BBDD) • Conjunto de información organizada de forma independiente a su tratamiento y a los detalles de su almacenamiento físico  Modelo de datos • Estructura lógica de los datos y conjunto de operaciones que permiten crearlos, consultarlos y modificarlos • El más utilizado es el relacional (datos organizados en tablas)  Lenguaje de acceso • El más utilizado es SQL (creación, consulta y modificación de BBDD relacionales)  Sistema gestor de bases de datos (SGBD) • Aplicación para crear, mantener y consultar BBDD • El código de las aplicaciones que usan BBDD no debería depender de los detalles particulares de los SGBDs  Necesidad de algún API estándar para conectar con SGBDs 2 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 3.  Existen muchas, habitualmente cada proveedor de SGBDs ofrece una propia para acceder a sus BBDD  Protocolos propietarios • Dependen del proveedor del SGBD • Dependen del lenguaje de programación que se quiera utilizar  Plataforma Microsoft • ODBC (Open DataBase Connectivity)  Protocolo de conexión basado en parte del estándar SQL/CLI (API en C) • OLE/ADO DB • ADO .NET • ADO .NET + LINQ  Plataforma Java • JDBC (Java DataBase Connectivity) 3 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 4. 4 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 5.  Paquete Java ubicado en java.sql • Versiones 1.0, 2.0, 3.0 y 4.0 (la actual, ya incluida en el JDK 6) • Proporciona una pasarela JDBC  ODBC  Mecanismos básicos 1. Conectarse a una fuente de datos  Para ello la fuente de datos debe incluir un driver JDBC (u ODBC, necesitando entonces usar la pasarela) 2. Consultar/cambiar tablas en las BBDD de la fuente  Se usa SQL “embebido” en los parámetros (Strings) de ciertos métodos definidos en las clases de este paquete  El resultado son objetos Java, definidos en el paquete 5 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 6. Cliente BD  Servidor BD  BD • El cliente no necesita saber nada sobre como funcionan los controladores de BBDD  Programación independiente de la plataforma • JDBC tiene dos capas 1. API de JDBC 2. API del Administrador de Controladores JDBC  Los distribuidores de BBDD deben construir sus controladores (drivers) siguiendo los requisitos de esta segunda API 6 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 7. Debido a su diseño, los programadores sólo necesitan conocer la capa Java/JDBC Esquema de comunicación (entre JDBC y una base de datos) • Aplicación Java  Administrador de Controladores de JDBC  1.  Pasarela JDBC/ODBC  Controlador ODBC  Base de datos 2.  Controlador JDBC suministrado por el fabricante  Base de datos 7 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 8.  Controlador Tipo 1 • Traduce JDBC a ODBC y utiliza el controlador ODBC para comunicar con la base de datos • Oracle incluye uno de estos controladores en el JDK: la pasarela JDBC/ODBC • Requiere la configuración específica de un controlador ODBC…  Controlador Tipo 2 • Escrito parcialmente en Java y en código nativo • Comunica la API del cliente con la base de datos • Requiere instalación previa de software específico de la plataforma junto con una librería Java asociada… 8 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 9.  Controlador Tipo 3 • Librería cliente de Java puro • Usa protocolo independiente de la BD para enviar peticiones al servidor (y luego éste traduce)  Controlador Tipo 4 • Librería de Java puro • Traduce peticiones JDBC a un protocolo de base de datos específico  Las distribuidores de bases de datos más habituales suministran controladores tipo 3 ó 4 con sus productos • Otras compañías también los desarrollan • Estudiaremos cómo utilizar los de tipo 1 y 3 9 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 10.  Hay varias alternativas, cada una con sus requisitos  Oracle • Añadir librería con el controlador al proyecto  ojdbc14_g.jar (Oracle Instant Client)  MySQL • Añadir librería con el controlador al proyecto  mysql-connector-java-xx.jar (MySQL Connector/J)  Access • Configurar el controlador ODBC para poder acceder a la base de datos (nombreControlador) 1. Panel de Control  Herramientas administrativas  Orígenes de datos (ODBC)  ODBC Data Source Administrator 2. Añadir [Microsoft Access Driver (*.mdb)] 3. Seleccionar base de datos 10 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 11. En el programa • Registrar el controlador cargando su clase  System.setProperty(“jdbc.drivers”, driver);  Se pueden registrar varios drivers separados por “:”  Class.forName(String driver)  Registro manual • Ejemplos  sun.jdbc.odbc.JdbcOdbcDriver  oracle.jdbc.driver.OracleDriver 11 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 12. Para conectar con la base de datos hay que especificar la fuente de datos mediante una sintaxis similar a una URL • jdbc:nombreSubprotocolo:otrosElementos  nombreSubprotocolo selecciona el controlador concreto  otrosElementos depende del subprotocolo • Ejemplos  jdbc:oracle:thin:@ipServidor:puerto:nombreBD  jdbc:odbc:nombreControlador 12 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 13. ODBC • Connection conn = DriverManager.getConnection(String url) Oracle • Connection conn = DriverManager.getConnection (String url, String user, String password) conn.close() • Cierra la conexión • Es necesario cerrar las conexiones una vez que se han terminado de utilizar para liberar recursos (tanto en la aplicación como en el servidor) 13 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 14.  Usa archivos de configuración (tipo Properties) • Fichero database.properties  jdbc.drivers, jdbc.url, jdbc.username, jdbc.password • Ejemplo Oracle  jdbc.drivers=oracle.jdbc.driver.OracleDriver  jdbc.url=jdbc:oracle:thin:@localhost:1521:test  jdbc.username=test  jdbc.password=test • Ejemplo Access  jdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver  jdbc.url=jdbc:odbc:TEST  jdbc.username=  jdbc.password= 14 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 15.  Primero, hay que crear un objeto Statement (sentencia SQL) • Statement stmt = conn.createStatement ();  Después podemos hacer consultas • ResultSet executeQuery(String sql)  Realiza“select”  Devuelve los registros en un ResultSet • int executeUpdate(String sql)  Realiza “insert, update, delete, create, drop…”  Devuelve num de registros afectados de o a 1 • boolean execute(String sql) • El modo “auto-commit” funciona por defecto, es decir, cada sentencia se ejecuta dentro de una única transacción 15 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 16. java.sql.ResultSet • Tabla de resultados por filas • cursor entre filas, inicialmente antes de la primera • boolean next()  Pasa el cursor a la siguiente fila  false, si se llega al final de la tabla  true, caso contrario • Tipo getTipo(int numColumna) • Tipo getTipo(String nombreColumna) 16 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 17. /** * Tabla "Prueba" con columna "cadena" de tipo VARCHAR. * Seleccionar las columnas de la tabla prueba */ ResultSet rset = stmt.executeQuery ("SELECT * FROM Prueba"); /** * Iterar a lo largo de la tabla obtenida, * imprimiendo las tuplas */ while (rset.next ()){ System.out.println (rset.getString (1)); //System.out.println (rset.getString ("cadena")); } // Liberación de recursos, tanto ResultSet como Connection rset.close(); stmt.close(); 17 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 18.  Información sobre objetos java.sql.ResultSet • Interfaz java.sql.ResultSetMetaData  getColumCount() numColumnas  1..n  getColumnName(i), getColumTypeName(i)  Información sobre tablas de usuario DatabaseMetaData dbmd = conn.getMetaData(); // MySQL, Access y HSQLDB ResultSet rs = dbmd.getTables( null, null, null, new String[]{"TABLE"}); // Oracle ResultSet rs = dbmd.getTables( null, "NombreUsuario", null, new String[]{"TABLE"}); 18 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 19.  En lugar de construir una sentencia cada vez que el usuario lanza una consulta, se puede preparar una vez y usarla muchas veces • Se gana en rendimiento ya que el servidor puede “cachear” el plan de ejecución de la consulta • Se gana en seguridad ya que los drivers habitualmente se encargan de procesar los parámetros de la consulta preparada para evitar ataques del tipo “SQL Injection” String consulta = "SELECT precio FROM libros WHERE autor = ?"; PreparedStatement stmtCP = conn.prepareStatement(consulta); stmtCP.setString(1, "Pepe"); ResultSet rs = stmtCP.executeQuery(); 19 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 20.  Para moverse hacia adelante y hacia atrás a través de los datos, e incluso, saltar a una posición concreta del conjunto de resultados • Statement stat = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY) • ResultSet rs = stat.executeQuery(query);  rs.previous()  fila anterior  rs.relative(n)  incremento relativo  rs.absolute(n)  posición n  int n = rs.getRow()  fila actual 20 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 21.  Se pueden actualizar los datos obtenidos con executeQuery • Statement stat = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE) • ResultSet rs = stat.executeQuery(query);  double precio = rs.getDouble("precio"); rs.updateDouble("precio", precio + incremento);  rs.updateRow();  actualiza la base de datos  rs.deleteRow();  borra la fila actual de la base de datos  rs.insertRow();  inserta una fila 21 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 22.  Las conexiones a la BBDD son "costosas" • Cliente: El driver reserva una cantidad de memoria (a veces > 1 MB) para gestionar una conexión... además tiene que realizar cierto trabajo para obtener la conexión • Servidor: El número de conexiones está limitado  existe un número máximo de conexiones permitidas  Un programa sencillo establece una única conexión al comienzo del mismo y la cierra cuando termina • Demasiado costoso con múltiples consultas  Las conexiones están pensadas para ser utilizadas por múltiples consultas • Hay que utilizar una conexión para cada grupo de consultas • No hay que tener una única conexión permanente abierta  En las aplicaciones reales se suele utilizar un "pool" de conexiones para optimizar y gestionar adecuadamente las conexiones de BBDD 22 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 23.  La POO a veces necesita persistencia  ¿Qué tipo de datos haríamos persistentes? • Objetos  Sería muy directo y útil  Las SGBDOO no están maduras, hay estándares pobres, etc. • Tablas (modelo relacional)  Hay SGBDs variados (pero necesitan desacoplamiento)  Las operaciones son siempre las mismas (hay uniformidad)  Solución: ORM (Object/Relational Mapping) • Realiza la conversión de objetos (Java, principalmente) a tablas (datos en modelo relacional) • Transparente, automático, independiente de SGBD (portable), aumenta productividad, etc. 23 Laboratorio de Programación de Sistemas – Acceso a bases de datos
  • 24.  Un armazón (framework) software es un conjunto de clases que proporciona funcionalidad genérica para solucionar un problema • No son solo librerías, imponen el flujo de control del programa • Se especializan/generalizan/personalizan según el problema particular  Algunos armazones para hacer ORM • Hibernate https://www.hibernate.org • Apache iBATIS http://ibatis.apache.org • Entreprise JavaBeans http://java.sun.com/products/ejb • iPersist http://ipersist.sourceforge.net • Apache Cayenne http://cayenne.apache.org 24 Laboratorio de Programación de Sistemas – Acceso a bases de datos