JDBC. Aplicaciones Distribuidas



Documentos relacionados
Contenido. Bases de Datos en Java: JDBC y Patrón DAO 26/04/2007

10. JDBC. 10. JDBC Introducción. java.sql

Acceso a BD desde Java. JDBC

JDBC. Francisco Javier Solans Benedí Software Developper

Desarrollo de Software con

Módulo 15. Introducción a JDBC, Java Database Connectivity. Programación Orientada a Objetos Página 16.0 de 25

Bases de Datos usando Java : JDBC. Ing. César Julio Bustacara Medina

Base de Datos JDBC. Unidad: 1 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos

Java y MySQL. Ciclo de ejecución

Programación Orientada a Objetos Analista Programador Universitario Plan 2008 Año 2010

Acceso a bases de datos con JDBC

Universidad Don Bosco. Materia: Programación Orientada a Objetos Contenido: Modificadores de Acceso y JDBC

Qué es JDBC? Cuatro tipos de drivers JDBC Uso de JDBC

JDBC: Java DataBase Conectivity

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

Acceso a BDs en Java: JDBC

JDBC. Una mini-introducci. introducción

2.1 La interfaz de JDBC para el programador de aplicaciones La interfaz JDBC para los controladores JDBC... 5

2.1 Tutorial de JDBC

JDBC Julio Introducción JDBC Arquitecturas típicas con JDBC... 3

Practica 11: Conexión de Java con Bases de datos Access

Base de Datos Oracle: desarrollo de aplicaciones

Federico Peinado

Curso Básico de JDBC. Rodolfo Campos Madrid, Septiembre de 2012

Programación Orientada a Objetos II. La Plataforma JDBC

Práctica 2 ACCESO A BASES DE DATOS CON JDBC. 1. Creación de una base de datos en MySQL...1

NORMAS PARA LA ENTREGA DE LOS LABORATORIOS

Bases de Datos Introducción a la Conectividad de

Acceso a bases de datos SQL - JDBC. CAPITULO IV POR Lic Adrian Quisbert Vilela

Oracle 12c DISEÑO Y PROGRAMACIÓN

Arquitectura J2EE para aplicaciones web. Aplicaciones web con JSP. Arquitectura J2EE: Capa de Acceso Web. Arquitectura J2EE: Capa Cliente

APÉNDICE A: ACCESO A UNA BASE DE DATOS CON JDBC

JDBC. Curso 04/05. Tema 8 JDBC. Departament d Informàtica. Universitat de València. 1. Introducción Arquitecturas típicas...

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

JDBC - Acceso a Bases de Datos

CONECTIVIDAD CON BASES DE DATOS

1

Notas técnicas de JAVA - Tip en detalle Nro. 2

JDBC. Cada celda de la tabla debe tener solamente un valor (nunca un conjunto de valores). (1NF)

Diplomado Java. Descripción. Objetivo. A quien está dirigido. Requisitos. Beneficios

Laboratorios de BASES DE DATOS. (I.T. Informática)

MySQL con Java en MS Windows

Acceso a bases de datos desde Java: JDBC

Bases de datos y JDBC

Diseño de la capa de datos. Acceso a datos con JDBC

ATLAS PERSISTENCIA DE SESIONES EN BASE DE DATOS CON WEBLOGIC 9.2

Acceso a bases de datos desde Java: JDBC

Prácticas Ingeniería del Software 3º

Tópicos Avanzados de Programación (TAP3501)

%& %)& '$!%*+ $, %%%&$ %%

Copyright. Para cualquier duda, consulta, insulto o tirón de orejas sobre este tutorial dirigirse a abraham@javahispano.org. El ABC de JDBC 1 de 36

Solución Examen Junio 2007 (a) Ejercicio GeoTaxi (1h 20 min.) Diagrama de Casos de Uso y. Casos de uso (2,5 puntos) Modelo de Dominio (1,5 puntos)

Taller de Programación II J2EE

JDBC 1. JDBC. 2. Bases de Datos. 3. Conectividad JDBC. Acceso de JDBC a Bases de Datos. Modelo de 2 Capas. Modelo de 3 Capas.

Ingeniería del Software II. Curso 2003/2004. Enunciado de la práctica del Segundo parcial.

JDBC: EL PUENTE ENTRE JAVA Y LAS BASES DE DATOS. En este articulo se expone la API JDBC (Java DataBase Connetivity), la cual permite el

GUÍA TÉCNICA. Desarrollo de Proyectos en Plataforma Liferay en el Gobierno de Extremadura

Práctica sobre compartición de instancias remotas.

Administración y programación de Bases de Datos con SQL Server 2005

Tema V. JDBC. Desarrollo de Aplicaciones para Internet Curso 12 13

Introducción a JDBC - Base de datos con Java

JAVA 8 Los fundamentos del lenguaje Java (con ejercicios prácticos corregidos)

Modelo de Objetos Distribuidos

Base de Datos JDBC. Unidad: 1 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos

Java y MySQL. Ciclo de ejecución

Centro de Capacitación en Tecnologías de la Información. Desarrollo de. diplomado

MySQL 5 (versiones 5.1 a 5.6) Guía de referencia del desarrollador

Guía práctica de introducción básica a JDBC

TEMA 11 INDICE [PROGRAMACIÓN]

Práctica Servlets & JDBC. Qué son? Qué necesitamos?

Ingeniería del Software Arquitectura Física en 3 niveles

CONCEPTOS BASICOS DEL LENGUAJE JAVA

PROGRAMACIÓN CON ACCESO A DATOS

CURSO DE PROGRAMACIÓN EN JAVA J2EE 7 ÍNDICE

Fundamentos de Oracle

Tema 2 Modelos de Base de Datos. Profesor Luis Gmo. Zúñiga Mendoza UMCA

Laboratorio de Programación III

Introducción a Java LSUB. 15 de enero de 2015 GSYC

UNIVERSIDAD DE MAGALLANES FACULTAD DE INGENIERIA DEPARTAMENTO DE COMPUTACIÓN DESARROLLO DE SOFTWARE PARA CONTROL DE INVENTARIO

JDBC: Conexiones con bases de datos desde Java

TEMA 1 ACCESO A BASE DE DATOS 1. QUE ES UN JDBC ODBC?

Microsoft SQL Server 2005

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

MySQL y Sesiones en PHP. Área de Ingeniería Telemática

Establecer una conexión con una base de datos o acceder a cualquier fuente de datos tabular Enviar enunciados SQL. Procesar los resultados

Tutorial rápido de ObjectDB

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

TUTORIAL DESARROLLO DE APLICACIONES PARA EVOLUTION CON MS ACCESS

2. Estructura de un programa en Java

Programación y Acceso a BD con SQL

Java y Access. 4. En nuestra pantalla aparecerá ahora la pestaña DSN usuario seleccionada. Para crear un nuevo perfil haremos click en Agregar...

3.9 Patrón Distributed callback

Descripción de Arquitectura Repositorio de metadatos de componentes de software

8. JDBC: acceso a bases de datos

JAVA ENTERPRISE EDITION (J2EE) ARQUITECTURA TECNOLOGÍAS (1/2) (L1)

Guía Rápida de Puesta en Marcha de MailStore

CURSORES EN SQL SERVER

El primer paso a realizar es crear la referencia JNDI para el origen de datos en el servidor local TomCat.

Manual del Protocolo XML-RPC de Mensajería Negocios

Análisis y Diseño. Guía Teórica desarrollada por el profesor del curso: Modelo Físico. Ing. Daniel Yucra danielyucra@uigv.edu.pe

Transcripción:

JDBC Aplicaciones Distribuidas

Contenido Definición. Arquitectura. Driver. Conexión. Consultas. Transacciones. Pool de conexiones. Patrón DAO. 2

JDBC Java DataBase Connectivity API Java para ejecutar consultas SQL en Bases de Datos Relacionales. Independiente del Sistema Gestor Relacional. Similar en concepto a ODBC de Windows. Distribuida en dos paquetes: java.sql, dentro de J2SE javax.sql extensión dentro de J2EE Para acceder a una base de datos es necesario un driver. Implementación de todas las interfaces del API. 3

JDBC El API ofrece las clases e interfaces para: Establecer una conexión a una base de datos. Ejecutar una consulta. Procesar los resultados. // Establece la conexión Connection con = DriverManager.getConnection ( "jdbc:odbc:mibd", milogin", mipassword"); // Ejecuta la consulta Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select nombre, edad FROM Empleados"); // Procesa los resultados while (rs.next()) { String nombre = rs.getstring( nombre"); int edad = rs.getint( edad"); } 4

Arquitectura 5

Driver Conjunto de clases encargadas de implementar las interfaces del API y acceder a la base de datos. Tipos: Driver Tipo 1: Utilizan un API nativa estándar Ejemplo: puente JDBC:ODBC Driver Tipo 2: Utilizan un API nativa de la base de datos Ejemplo: Oracle OCI Driver Tipo 3: Servidor remoto con un API genérica. Útil para aplicaciones en internet. Driver Tipo 4: Totalmente desarrollado en Java Ejemplo: Oracle Thin. 6

Driver Los drivers Tipo 1 y 2 utilizan código nativo vía JNI. Son más eficientes. Diseño Driver Tipo 3: En aplicaciones enterprise favorecen la gestión de las bases de datos, que se realiza en el servidor. Carga de un driver: Class.forName( acme.db.driver ); Repositorio de drivers: http://developers.sun.com/product/jdbc/drivers 7

Conexión Representa una conexión con una base de datos. Se obtienen a partir de la clase DriverManager: DriverManager.getConnection( URL, login, password ) Mantiene un registro de todos los drivers cargados en la JVM. URL identifica el driver y su tipo, la localización de la base de datos y su nombre: jdbc:oracle:oci:dis.um.es/mibd Alternativa a DriverManager: DataSource 8

DataSource Actúa como factoría de conexiones. Método getconnection() Abstrae los detalles de acceso: Cargar los drivers, URL, login, etc. Aplicaciones más portables. Suelen mantener un pool de conexiones. Proporcionado por el contenedor utilizando el API JNDI (Java Naming and Directory Interface). Los detalles de acceso se indican en ficheros de configuración. Acceso a los servicios de nombres y directorios. Ejemplo: acceso a recursos, LDAP. 9

Consultas SQL El API JDBC no restringe las sentencias que se envían a la BD. En principio, todos los drivers deben ser compatibles con ANSI SQL-2 Entry Level. Tipos de sentencias: Statement: para sentencias sencillas en SQL. PreparedStatement: para consultas preparadas, Ejemplo: las que tienen parámetros. CallableStatement: para ejecutar procedimientos almacenados en la BD. El API distingue dos tipos de consultas: Consultas: SELECT Actualizaciones: INSERT, UPDATE, DELETE, sentencias DDL. 10

Statement Son creadas a partir de la conexión: Statement stmt = conexion.createstatement(); Ejecución de una consulta: stmt.executequery( SELECT * FROM Pedidos ); Devuelve un objeto ResultSet. Ejecución de una actualización: stmt.executeupdate( DELETE FROM Pedidos WHERE codigo = 15 ) Devuelven un entero indicando los registros actualizados ó 0 si es una consulta DDL. 11

ResultSet Es un proxy sobre los registros del resultado de la búsqueda. Controla la recuperación de los registros. Representa un cursor (iterador) sobre los resultados. Movimiento: métodos next() y previous() Inicialmente el cursor está posicionado antes del primer registro. Depende del objeto consulta: Cada vez que se realice una consulta se pierden los resultados. 12

ResultSet Tenemos dos alternativas para acceder a las columnas del resultado: rs.getstring( nombre ); Nombre de la columna rs.getstring(1); Posición en la consulta El acceso por posición es útil cuando: Acceso a una columna derivada, ej. calcular la media Cuando hay columnas con los mismos nombres (join) Recuperación de los valores de las columnas: Métodos de acceso (getxxx). Es conveniente leer los datos de izquierda a derecha. Para averiguar si se ha leído un nulo: wasnull() 13

ResultSet Métodos de Acceso Tipo de dato SQL Método de Acceso CHAR String getstring() VARCHAR String getstring() LONGVARCHAR InputStream getasciistream() ó getunicodestring() NUMERIC java.math.bigdecimal getbigdecimal() DECIMAL java.math.bigdecimal getbigdecimal() BIT boolean getboolean() TINYINT byte getbyte() SMALLINT short getshort() INTEGER int getint() BIGINT long getlong() REAL float getfloat() FLOAT double getdouble() DOUBLE double getdouble() BINARY byte[] getbytes() VARBINARY InputStream getbinaystream() DATE java.sql.date getdate() TIME java.sql.time gettime() TIMESTAMP java.sql.timestamp gettimestamp() 14

PreparedStatement Problema con Statement: Cuando la consulta se realiza dentro de un bucle y varía sólo en unos valores: stmt.executequery( SELECT * FROM Cliente WHERE codigo = + i); La base de datos planifica cada consulta. Conviene disponer de una consulta con parámetros. PreparedStatement: Especialización de Statement que permite definir consultas parametrizadas. La BD sólo planifica la consulta cuando se crea. Evitan tener que formatear los datos al construir la cadena de consulta: para cadenas, fechas y horas. 15

PreparedStatement También se crean a partir de la conexión: PreparedStatement pstmt = conexion.preparestatement( SELECT * FROM Cliente WHERE codigo =? ) Los parámetros de entrada se especifican por posición utilizando métodos setxxx: psmt.setint(1, 20); Misma equivalencia que los getxxx de ResultSet. Los valores se conservan entre ejecuciones. Borrar parámetros: clearparameters() Ejecución: Consulta: executequery(). Actualización: executeupdate(). 16

Transacciones Ejecución de bloques de consultas SQL manteniendo las propiedades ACID (Atomicy-Consistency- Isolation-Durability) Una conexión funciona por defecto en modo autocommit: Cada consulta representa una sola transacción. Método: conexion.setautocommit(false); Definimos bloques de consultas: Deshabilitando el modo autocommit. Finalizamos la transacción ejecutando commit() o rollback() sobre la conexión. 17

Nivel de Aislamiento Transaccional Niveles de aislamiento: TRANSACTION_NONE: Sin soporte transaccional. TRANSACTION_READ_UNCOMMITED: Permite lecturas sobre datos no comprometidos. TRANSACTION_READ_COMMITED: Permite lecturas sólo sobre datos comprometidos. Nivel por defecto. TRANSACTION_REPEATABLE_READ. Bloquea los datos leídos. TRANSACTION_SERIALIZABLE. Sólo una transacción al mismo tiempo. Suelen estar disponibles read commited y serializable. 18

Concurrencia Establecer el modo de aislamiento: conexion.settransactionisolation( Connection.TRANSACTION_SERIALIZABLE); Consejos de uso: Bloque con sólo actualizaciones: TRANSACTION_READ_COMMITED Bloque donde leamos varias veces el mismo registro: TRANSACTION_REPEATABLE_READ Bloque en el que leamos un valor para actualizarlo: TRANSACTION_SERIALIZABLE Bloque donde realicemos varias veces la misma consulta (varios registros): TRANSACTION_SERIALIZABLE 19

Bases de Datos en Entornos Web Motivación: Múltiples conexiones simultáneas a la base de datos. El establecimiento de una conexión es costoso. Consecuencia: Definir cuidadosamente las transacciones. Establecer algún mecanismo para optimizar el uso de conexiones Pool de Conexiones Pool de Conexiones: Habitualmente implementado por los DataSource. 20

Pool de Conexiones Cuando no dispongamos de un DataSource que lo implemente. Recomendaciones de diseño: Definir la clase ConnectionPool como Singleton. Implementará la interface DataSource Objeto que devuelve el getinstance. Definir una clase ConnectionWrapper que implemente Connection: Todos los métodos a excepción de close delegan en un objeto Connection. close libera la conexión del pool. Creará un lista de conexiones inicial que expandirá si no hay ninguna libre. 21

ConnectionPool - +conexion 1 Estructura <<Int erface>> Connection createstatement() : Statement preparestatement(consulta : String) : PreparedStatement close()...() <<Interface>> DataSource getconnection() : Connection ConnectionWrapper createstatement() : Statement preparestatement(consulta : String) : PreparedStatement close()...() +pool * ConnectionPool getconnection() : Connection retu rnconne ction(c : ConnectionPool) <<s tati c>> getinstance() : DataSource "close" devuelve el objeto ConnectionWrapper al Pool <<uses>> DriverManager createconnection() : Connection 22

Patrón DAO Motivación: Almacenar y recuperar información persistente de diferentes fuentes: bases de datos relacionales, LDAP, XML, etc. Las APIs para el acceso a datos son muy diferentes. La portabilidad y mantenimiento de los componentes (servlets, EJB,...) se ve limitada. Solución: Usar un objeto DAO (Data Access Object) que abstraiga y encapsule el acceso a la fuente de datos. El DAO gestiona la conexión con la fuente de datos para obtener y almacenar la información. 23

Colaboración ServletEdicion dao : DAOCliente c : Cliente Fuente de datos Participantes: Objeto de negocio DAO ValueObject Fuente de datos getclientebyusuario(usuario) return c getnombre() Accede a los datos setcorreo( correo) updatecliente(c) Obtiene los datos new( ) getnombre() Recupera la información Actualiza los datos 24

Estrategia de Implementación Basada en los patrones Abstract Factory y Factory Method. Pasos: Definir la interface DAO de nuestros objetos de datos public interface ClienteDAO { public Cliente create (String nombre, String nif, String correo, String usuario, String clave) throws DAOException; public Cliente findclientebyusuario (String usuario) throws DAOException; public java.util.collection findall () throws DAOException; } public void update (Cliente c) throws DAOException; 25

Factoría Abstracta Definir la factoría abstracta de objetos DAO: public abstract class DAOFactoria { public abstract ClienteDAO getclientedao() throws DAOException; public abstract ProductoDAO getproductodao() throws DAOException; } public final static int ACCESS = 1;... public static DAOFactoria getdaofactoria (int tipo) { switch (tipo) { case ACCESS: return new AccessDAOFactoria(); case XML:... 26

Factoría Concreta Implementar la factoría concreta: public class AccessDAOFactoria extends DAOFactoria{... public ClienteDAO getclientedao() { } } return (ClienteDAO) new AccessClienteDAO(ds); Simplemente instancia objetos DAO concretos. 27

Clase DAO Implementar las clases DAO concretas: import java.sql.*; public class AccessClienteDAO implements ClienteDAO {... public Cliente create (String nombre, String nif, String correo, String usuario, String clave) throws DAOException { Connection con = null; try { con = ds.getconnection(); Statement stmt = con.createstatement(); stmt.executeupdate(...); stmt.close(); con.close(); Cliente c = new Cliente(); c.setnombre(nombre);... return c;... } 28

Estructura DAOFactoria getclientedao() : ClienteDAO getproductodao() : ProductoDAO <<static>> getdaofactoria() : DAOFactoria AccessDAOFactoria getclientedao() : ClienteDAO getproductodao() : ProductoDAO XMLDAOFactoria getclientedao() : ClienteDAO getproductodao() : ProductoDAO AccessClienteDAO <<create>> <<create>> AccessProductoDAO <<Interface>> ClienteDAO <<Interface>> ProductoDAO create() : Cliente findall() : Collection findbyusuario() : Cliente update() 29

Consecuencias Beneficios: Favorece la transparencia. Facilita la migración de los componentes. Reduce la complejidad del código. Centraliza todo el acceso a datos en una capa. Inconvenientes: Diseño de una jerarquía de clases. Introduce una nueva capa. 30