Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 63

Bases de datos

relacionales
Tema 2. Acceso a datos
• Conocer las APIs que proporcionan conectores a
bases de datos, en particular JDBC.
• Comprender el desfase objeto-relacional.
Objetivos • Abrir una conexión a una base de datos JDBC
mediante drivers.
• Escribir programas en Java utilizando JDBC para
ejecutar sentencias SQL: de definición de datos y
de modificación y consulta de datos.
• Utilizar sentencias preparadas para ejecutar
sentencias de SQL de manera eficiente.
• Trabajar con transacciones.
Sistemas de bases de datos relacionales

• Un sistema gestor de base de datos (SGBD) es un


conjunto de programas que administra y gestiona
la información contenida una base de datos.
• El usuario no ve detalles acerca del
almacenamiento y los procedimientos para
recuperar y actualizar la información.
Sistemas de bases de datos relacionales

• Dos tipos básicos:


• Sistemas embebidos a los programas (SQLite)
• Sistemas independientes que se ejecutan de forma
separada.
Modelo relacional

• Indica como se organizan los datos en un SGBD.


Modelo relacional

¿Cómo hacemos para almacenar


objetos en un SGDB?
Desfase Objeto-Relacional

Son las diferencias existentes entre la programación


orientada a objetos (POO) y las bases de datos
relacionales:
• Tipos de datos complejos frente a simples
• Objetos frente a tablas y tuplas
• Asociaciones frente a relaciones
Desfase Objeto-Relacional

Son las diferencias existentes entre la programación


orientada a objetos (POO) y las bases de datos
relacionales:
• Tipos de datos complejos frente a simples
• Objetos frente a tablas y tuplas
• Asociaciones frente a relaciones
Conectores

• Un conector es una API que permite a los


programas de aplicación trabajar con bases de
datos.
• No son exclusivos de las bases de datos
relacionales, tambien de objetos y No-SQL.
Standard ODBC

• Open DataBase Connectivity (ODBC) es un


estándar de acceso a las bases de datos.
• Permite acceder a cualquier dato desde cualquier
aplicación, sin importar qué sistema de gestión de
bases de datos almacene los datos
• Todos los SGBD lo implementan.
Standard ODBC
JDBC (Java DataBase Connectivity)
http://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/

• JDBC es la API que permite la conexión con las


bases de datos utilizando el lenguaje de
programación Java, independientemente del
sistema operativo que se utilice y de la base de
datos a que se quiera acceder.
Tipos de drivers JDBC
Tipos de drivers JDBC

Se pueden distinguir cuatro tipos de drivers JDBC:


1. driver puente JDBC-ODBC.
2. driver API nativo / parte Java.
3. driver protocolo de red / todo Java.
4. driver protocolo nativo / todo Java.
Tipos de drivers JDBC
Características del driver puente ODBC

• Permite trabajar con multitud de drivers ODBC.


• Son útiles para las empresas que disponen de un
driver ODBC instalado
• En ocasiones, es la única forma de conectar con
determinadas bases de datos como, por ejemplo,
Microsoft Access.
• Baja eficiencia y no soportado por applets
Driver API nativo / Java

• Este tipo de drivers se encargan de traducir las


solicitudes de API JDBC en llamadas específicas
para cada base de datos, utilizando la interfaz de
métodos nativos que proporciona Java.
Protocolo de red / Java

Este tipo de drivers están implementados


utilizando una arquitectura de tres capas:
• Capa cliente JDBC.
• Capa intermedia.
• Base de datos a la que se accede.
Protocolo de red / Java

Ventajas
• No hay que instalar ninguna biblioteca en el cliente
• Mejor rendimiento
• La mejor opción para aplicaciones distribuidas por
internet
Desventajas
• Capa intermedia específica para cada SGBD
Protocolo nativo / Java

• Este tipo de driver realiza la conexión con las


bases de datos de manera directa utilizando,
para esto, el protocolo nativo del servidor.
• No necesitan utilizar ODBC o APIs nativas.
Protocolo nativo / Java

Ventajas
• No hay que instalar ninguna biblioteca en el cliente
• Mejor rendimiento
• La mejor opción para aplicaciones distribuidas por
internet
Desventajas
• Capa intermedia específica para cada SGBD
Conexiones JDBC

El API JDBC permite realizar las conexiones de dos


formas distintas:
• Utilizando la clase java.sql.DriverManagerpara
aplicaciones en Java.
• Desde aplicaciones J2EE (Java 2 Enterprise
Edition).
Url JDBC

jdbc:<subprotocolo>:<subnombre>
• jdbc: indica el protocolo.
• Subprotocolo: indica el driver
• Subnombre: indica la sintaxis

jdbc:mysql:empleados ; jdbc:odbc:empleados
Operaciones básicas JDBC

Cargar Driver
• Class.forName("com.mysql.jdbc.Driver");

Crear conexión
• c = DriverManager.getConnection(url,…);
Operaciones básicas JDBC

Crear sentencia
• s = c.CreateStatement();
Ejecutar sentencia
• s.executeQuery(…)
• s.execute(…)
Operaciones básicas JDBC

Cerrar sentencia
• s.close();

Cerrar conexión
• c.close();
Instalación de un servidor de base de datos MySQL

Conexión desde un programa de Java.

Obtener el listado de las tablas disponibles


Instalación de un servidor MySQL
Instalación de un servidor MySQL
Instalación de un servidor MySQL
Información importante para la conexión

• Host
• Port
• User
• Password
• Parametros de conexión
Driver para la conexión
Uso con Maven

• POM.xml
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
</dependencies>
Interfaz Statement

• ExecuteUpdate(): permite la ejecución de


sentencias para la modificación de la base de
datos: INSERT, UPDATE, DELETE, etc.
• ExecuteQuery(): permite la ejecución de
consultas: SELECT
• Execute(): Permite cualquier tipo de consulta.
Interfaz Statement

Statement statement = con.createStatement();

statement.executeUpdate(sentenciaSQL);

statement.close();
Tipos de sentencias

• DDL: Lenguaje de definición de datos


• DML: Data Manipulation Language
Tipos de sentencias
Tipos de sentencias
Creación de tablas
Creación de tablas
Inserción de datos
Consultas
Métodos de ResultSet

.next() .getXXX(string)
.previous()
.getXXX(int)
.first()
.last()
.absolute(int pos) .close()
Sentencias preparadas

Por seguridad y rendimiento, si vamos a usar


sentencias SQL que requieran de algun parámetro,
debemos usar sentencias preparadas.
La sentencia es "compilada" por el servidor y luego
ejecutada con los diferentes parámetros.
Sentencias preparadas
Claves autogeneradas
Claves autogeneradas

Métodos de Statement
• Int ExecuteUpdate(String, int autoGeneratedKeys)
• Statement.RETURN_GENERATED_KEYS
• Statement.NO_GENERATED_KEYS

• ResultSet getGeneratedKeys()
Claves autogeneradas
Hacer un programa en Swing que muestre el
contenido de la base de datos en una tabla.
Modificar el anterior para hacer una aplicación CRUD
sobre una tabla (create, remove, update & delete)
Multiples tablas
Multiples tablas

Consultas complejas con JOIN


SELECT * FROM EVALUACIONES
JOIN ALUMNOS ON EVALUACIONES.alumno_id=ALUMNOS.id
JOIN EJERCICIOS ON EJERCICIOS.id=EVALUACIONES.tarea_id
WHERE EVALUACIONES.puntuacion IS NOT NULL
Transacciones

• Una transacción incluye varias instrucciones que


se ejecutan de forma secuencial.
• Estas se realizarán al completo de manera
exitosa, pero si hay algun fallo, todas deberán
ser descartadas.
• MySQL las tiene deshabilitadas por defecto.
Transacciones

START TRANSACTION
Operacion1
Operacion2

ROLLBACK
...
COMMIT
Transacciones

• .setAutoCommit(true): cada instrucción se ejecuta de forma


inmediata.
• .setAutoCommit(false): agrupar varias instrucciones como parte
de una sola transacción.
• .commit(): ejecuta todas las instrucciones desde el
último commit.
• .rollback(): deshace los cambios realizados desde el
último commit.
Procesado por lotes

• PreparedStatement stmt = c.prepareStatement();


• stmt.addBatch(); añade una sentencia preparada
….
• stmt.executeBatch(); ejecuta todas las sentencias
añadidas
• c.commit(); realiza la transacción
Crear una aplicación CRUD para gestionar los
pedidos del desayuno de la clase
Modelo de datos a usar
Interfaz de consola
Mapeo clases POJO
Gestión BBDD
• http://docs.oracle.com/javase/7/docs/api/java/io/File.html
• http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamento
s/archivos/flujos.htm
• https://www.youtube.com/watch?v=4TFi4tyBQGw
Enlaces de • https://www.youtube.com/watch?v=Ng0_7uZyIoA

interés • http://www.javahispano.org/storage/contenidos/serializaci
on.pdf
• http://www.mclibre.org/consultar/xml/lecciones/xml_que
es.html
• http://howtodoinjava.com/2014/07/30/dom-vs-sax-parser-
in-java/
• https://www.mclibre.org/consultar/xml/lecciones/xml-
xpath.html

También podría gustarte