Federico Peinado www.federicopeinado.es

Documentos relacionados
Acceso a BD desde Java. JDBC

Introducción a JDBC - Base de datos con Java

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

JDBC. Una mini-introducci. introducción

JDBC: Java DataBase Conectivity

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

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

Java y MySQL. Ciclo de ejecución

Bases de Datos Introducción a la Conectividad de

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

Desarrollo de Software con

JDBC. Francisco Javier Solans Benedí Software Developper

Técnicas de Programación

Manual de NetBeans y XAMPP

Acceso a BDs en Java: JDBC

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

Conexión ODBC Visual Basic - MSQL. Cristian Vidal Silva

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

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

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

Programación Orientada a Objetos II. La Plataforma JDBC

Oracle 12c DISEÑO Y PROGRAMACIÓN

Capítulo VI. Conclusiones. En este capítulo abordaremos la comparación de las características principales y

Laboratorio de Programación III

Estructura de Bases de datos. Leonardo Víquez Acuña

1

myappgen Usted Construye la aplicación mientras la ejecuta

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Aplicación de Base de Datos con MySQL, ODBC y Delphi

Formatos para prácticas de laboratorio

Bases de datos relacionales y el modelo entidad-relación

CAPITULO 9. Diseño de una Base de Datos Relacional Distribuida

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

Programación páginas web. Servidor (PHP)

- Bases de Datos - - Diseño Físico - Luis D. García

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

Registro y Comunicación Automatizada a Bases de Datos

PROGRAMACIÓN PÁGINAS WEB CON PHP

BASES DE DATOS OFIMÁTICAS

myappgen Usted Construye la aplicación mientras la ejecuta

TUTORIAL DESARROLLO DE APLICACIONES PARA EVOLUTION CON MS ACCESS

Base de datos relacional

Microsoft SQL Server 2005

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

BROWSERSQL VERSIÓN 3.1 TUTORIAL

ATLAS PERSISTENCIA DE SESIONES EN BASE DE DATOS CON WEBLOGIC 9.2

UNIVERSIDAD DE OVIEDO

Oracle Database 10g: Taller de Administración I 1-2

GESTOR DE LICENCIAS Ayuda

Acceso a bases de datos MySQL con PHP

NORMAS PARA LA ENTREGA DE LOS LABORATORIOS

Herramienta de Gestión Integral de E-Business

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

ADO.NET. Arquitectura de ADO.NET

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

III. ADMINISTRACIÓN DE ORACLE.

La interoperabilidad se consigue mediante la adopción de estándares abiertos. Las organizaciones OASIS y W3C son los comités responsables de la

serra Access y SQL Server Qué es mejor en cada caso? Valentín Playá, Serra GTS 22 de enero de 2009 Bases de datos 1

Capítulo 1: Introducción a los Sistemas de Gestión de Bases de Datos (SGBD)

Resumen. El rol del lenguaje SQL en los SGBDR y en la Relacional. cjimenez@inf.udec.cl, tamrstro@inf.udec.cl

LABORATORIO DE RC: PRÁCTICA 4: IMPLEMENTACIÓN DE UN CLIENTE DE CORREO

JAVA EE 5. Arquitectura, conceptos y ejemplos.

Maxpho Commerce 11. Gestión CSV. Fecha: 20 Septiembre 2011 Versión : 1.1 Autor: Maxpho Ltd

XPERTO EN DISEÑO DE PÁGINAS WEB

vmysql Requisitos Previos Conexión con el servidor vmysql 1/5

Aviso Legal El presente libro electrónico se distribuye bajo Attribution-NonCommercial- NoDerivs 3.0 Unported

TRABAJO GRUPAL TEMA: COMO CREAR BASE DE DATOS EN SQL

Instrucciones para la instalación de IBM SPSS Data Access Pack para Linux

ADMINISTRACIÓN DE BASE DE DATOS

Arquitectura de sistema de alta disponibilidad

OpenProdoc. ECM Open Source

Un nombre de usuario de 30 caracteres o menos, sin caracteres especiales y que inicie con una letra.

U.E JUAN DE VELASCO CREAR DATOS EN SQL

Administración de la producción. Sesión 10: Gestor de Base de Datos (Access)

MICQ. Trabajo Práctico Final Seminario de Ingeniería en Informática I Facultad de Ingeniería, UBA. Junio Cátedra: Pablo Cosso

El Programa estadístico R

Acceso a bases de datos en Perl

Tablas y Campos Nuevos

Requisitos técnicos para la instalación. Arquitectura Hardware Arquitectura Software. Instrucciones de instalación GONG-R

Consultas con combinaciones

ArquitecturaTécnica de TRAVEL OPEN APPS. Breve definición técnica de la plataforma Travel Open Apps

Curso Online de Oracle 10g

Generación de código para Hibernate desde modelos UML

C a p í t u l o. Instalación. Contenido

T12 Vistas y tablas temporales

Guía de Laboratorio Base de Datos I.

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

A continuación se presenta la forma en que se puede conectar PHP con el gestor de bases de datos MySQL.

Taller de Programación II J2EE

- MANUAL TÉCNICO - Software de diagnóstico de la seguridad de la información y autoimplantación de LOPD. Rev. 01- FEBRERO 2013

1.1.- Objetivos de los sistemas de bases de datos Administración de los datos y administración de bases de datos Niveles de Arquitectura

GLOSARIO. Arquitectura: Funcionamiento, estructura y diseño de una plataforma de desarrollo.

Trabajo TICO Unidad 2: Sistemas Operativos. Guillermo Jarne Bueno.

Metadatos en Plataformas ECM

Eurowin 8.0 SQL. Manual de la FIRMA DIGITALIZADA

Toda base de datos relacional se basa en dos objetos

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

Número de Práctica: 1 Nombre de la Práctica: Comunicación Cliente Servidor Vía Sockets Java con Sistema Manejador de Bases de Datos

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

CAPITULO 8. Planeamiento, Arquitectura e Implementación

Transcripció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

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

4

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

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

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

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

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

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

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

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

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

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

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

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

/** * 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

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

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

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

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

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

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

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

Federico Peinado www.federicopeinado.es