Acceso a bases de datos con JDBC



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

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

Java y MySQL. Ciclo de ejecución

JDBC. Francisco Javier Solans Benedí Software Developper

JDBC. Una mini-introducci. introducción

JDBC. Aplicaciones Distribuidas

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

Acceso a BD desde Java. JDBC

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

Acceso a BDs en Java: JDBC

Federico Peinado

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

NORMAS PARA LA ENTREGA DE LOS LABORATORIOS

JDBC: Java DataBase Conectivity

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

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

Programación Orientada a Objetos II. La Plataforma JDBC

Desarrollo de Software con

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

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

Acceso a bases de datos desde Java: JDBC

Bases de Datos Introducción a la Conectividad de

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

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

Acceso a bases de datos desde Java: JDBC

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

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

MySQL con Java en MS Windows

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

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

Java y MySQL. Ciclo de ejecución

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

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

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

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

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

Práctica sobre compartición de instancias remotas.

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

1

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

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

PHP Y BASES DE DATOS. Introducción a SQL

Bases de datos y JDBC

Asignatura: Administración de Bases de Datos. Pedro P. Alarcón Cavero

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

Introducción a los Sistemas de Gestión de Bases de Datos

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

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

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Ejercicios - Persistencia en Android: ficheros y SQLite

Uso de excepciones en Java

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

Bases de Datos 3º Informática de Sistemas

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

Formatos para prácticas de laboratorio

Prácticas Ingeniería del Software 3º

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

Oracle 12c DISEÑO Y PROGRAMACIÓN

Base de datos relacional

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

CURSO DE PROGRAMACIÓN EN JAVA J2EE 7 ÍNDICE

Tutorial rápido de ObjectDB

Acceso a bases de datos en Perl

BASES DE DATOS AVANZADAS Transacciones en MYSQL

Programación y Acceso a BD con SQL

CURSORES EN SQL SERVER

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL.

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

Manual de NetBeans y XAMPP

2.1 Tutorial de JDBC

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

Laboratorio de Programación III

Consultas con combinaciones

CONCEPTOS DE PROCESAMIENTO DE TRANSACCIONES

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

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

Desarrollo Cobol/DB2

TEMA 20: CONCEPTOS BÁSICOS DE SQL

Ciclo Formativo de Grado Superior de Administración de Sistemas Informáticos en red

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

Tema 2. El lenguaje de programación Java (Parte 1)

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

Programación Orientada a Objetos. Java: Excepciones

Acceso a bases de datos MySQL con PHP

JDBC: Conexiones con bases de datos desde Java

MANUALITO MS-SQL SERVER

Dossier de prácticas

Formato para prácticas de laboratorio

8. JDBC: acceso a bases de datos

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)

APLICACIONES WEB PERL + BASES DE DATOS REQUERIMIENTO RESPUESTA

Integración de Laboratorios Remotos en emersion

Introducción a JDBC - Base de datos con Java

Patrones para persistencia (I) Ingeniería del Software II

Manejo de Transacciones

Conexión de Mysql con NetBeans

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

Registro y Comunicación Automatizada a Bases de Datos

Introducción a la programación orientada a objetos

Base de Datos Oracle: desarrollo de aplicaciones

Transcripción:

Acceso a bases de datos con JDBC Aplicaciones Web/Sistemas Web Juan Pavón Mestras Dep. Ingeniería del Software e Inteligencia Artificial Facultad de Informática Universidad Complutense Madrid Material bajo licencia Creative Commons, Juan Pavón 2013 JDBC Java Database Connectivity API Java para conectar las aplicaciones a bases de datos Arquitectura modular La misma interfaz para distintos tipos de bases de datos Implementa un gestor de drivers de bases de datos Aplicación Java JDBC API (aplicación) JDBC JDBC API (controlador) Driver MySQL Driver Oracle Driver Sybase Driver DB2 MySQL Oracle Sybase DB2 Juan Pavón - UCM 2012-13 JDBC 2

Paquete java.sql Uso de controladores de las BD Clase DriverManager Permite establecer y gestionar conexiones a las BD Clase SQLPermission Proporciona los permisos para poder usar el DriverManager a código en ejecución dentro de un Security Manager (por ejemplo applets) Interfaz Driver Metodos para registrar y conectar controladores basados en tecnología JDBC Clase DriverPropertyInfo Propiedades de un controlador Excepciones SQLException SQLWarning Juan Pavón - UCM 2012-13 JDBC 3 Paquete java.sql Interfaz con la aplicación Envío de instrucciones SQL a la BD Connection Métodos para crear instrucciones y para gestionar conexiones y sus propiedades Statement Permite enviar instrucciones a la BD PreparedStatement Permite usar instrucciones preparadas o SQL básicas CallableStatement Llamada a procedimientos almacenados en la BD Savepoint Puntos de recuperación en una transacción Recuperación de los resultados de la consulta a la BD ResultSet Conjunto de resultados que se devuelven de una query ResultSetMetaData Información sobre las columnas del objeto ResultSet Juan Pavón - UCM 2012-13 JDBC 4

Paquete java.sql Interfaz con la aplicación Correspondencia de tipos SQL con clases e interfaces de Java Array SQL ARRAY Blob SQL BLOB Clob SQL CLOB Date SQL DATE NClob SQL NCLOB Ref SQL REF RowId SQL ROWID Struct SQL STRUCT SQLXML SQL XML Time SQL TIME Timestamp SQL TIMESTAMP Clase Types constantes para tipos SQL Correspondencia de tipos SQL definidos por el usuario a Java SQLData SQLInput SQLOutput Juan Pavón - UCM 2012-13 JDBC 5 Correspondencia de tipos SQL Java Types.BIT boolean Types.TINYINT byte Types.SMALLINT short Types.INTEGER int Types.BIGINT long Types.FLOAT double Types.REAL float Types.DOUBLE double Types.NUMERIC java.math.bigdecimal Types.DECIMAL java.math.bigdecimal Types.CHAR java.lang.string Types.VARCHAR java.lang.string Types.LONGVARCHAR java.lang.string Types.DATE java.sql.date Types.TIM java.sql.time Types.BINARY byte [] Types.VARBINARY byte [] Juan Pavón - UCM 2012-13 JDBC 6

Paquete java.sql Interfaz con la aplicación Para obtener información de la BD (metadatos) DatabaseMetaData Información sobre la BD DatabaseMetaData infobd= conexion.getmetadata(); System.out.println("Base de datos: " + infobd.getdatabaseproductname()); System.out.println("Version: " + infobd.getdatabaseproductversion()); catch (Exception ex) { // Tratar el error Juan Pavón - UCM 2012-13 JDBC 7 Programación con JDBC Secuencia normal: Establecer la conexión con la BD Cargar controladores (si se usa una versión de Java inferior a la 6) Establecer la conexión Crear un objeto Statement para hacer petición a la BD Asociar una sentencia SQL al objeto Statement Proporcionar valores de los parámetros Ejecutar el objeto Statement Procesar los resultados Liberar recursos (cerrar la conexión) Si es necesario, se pueden ejecutar varias instrucciones dentro de una transacción (propiedades ACID) Abrir transacción Crear y ejecutar instrucciones Procesar resultados Cerrar transacción Juan Pavón - UCM 2012-13 JDBC 8

Establecimiento de conexión con la BD Registrar un controlador Los DriverManager se encargan de gestionar la conexión y todas las comunicaciones con la BD Necesitan conocer los controladores específicos para las BD que se vayan a utilizar Registro de un controlador para MySQL Utilizar el controlador MySQL Connector/J Disponible en: http://dev.mysql.com/downloads/connector/j Cómo instalarlo: http://dev.mysql.com/doc/refman/5.7/en/connector-j-installing.html El controlador se puede registran con el Class loader de Java La clase a cargar viene dada en la documentación del controlador Class.forName("com.mysql.jdbc.Driver").newInstance(); catch (Exception ex) { // Tratar el error Juan Pavón - UCM 2012-13 JDBC 9 Establecimiento de conexión con la BD Los controladores se identifican con un URL JDBC de la forma jdbc:subprotocolo:localizadorbd El subprotocolo indica el tipo de base de datos específico El localizador permite referenciar de forma única una BD Host y opcionalmente puerto Nombre de la base de datos La conexión a la BD se hace con el método getconnection() public static Connection getconnection(string url) public static Connection getconnection(string url, String user, String password) public static Connection getconnection(string url, Properties info) Todos pueden lanzar la excepción SQLException conexion = DriverManager.getConnection( "jdbc:mysql://localhost/tienda","pruebas", "pruebas"); catch (SQLException ex) { // Tratar el error Juan Pavón - UCM 2012-13 JDBC 10

Crear y ejecutar operaciones en la BD Statement Encapsula las instrucciones SQL a la BD Se crea a partir de la conexión instruccion = conexion.createstatement(); Métodos executequery(string sql) Ejecución de consultas: SELECT Devuelve un objeto ResultSet executeupdate(string sql) Modificaciones en la BD: INSERT, UPDATE, DELETE Devuelve el número de columnas afectadas execute(string sql) Ejecución de instrucciones que pueden devolver varios conjuntos de resultados Requiere usar luego getresultset() o getupdatecount() para recuperar los resultados, y getmoreresults() para ver los siguientes resultados Juan Pavón - UCM 2012-13 JDBC 11 Crear y ejecutar operaciones en la BD ResultSet Encapsula el conjunto de resultados Para obtener el valor de cada campo hay que usar el método getx("campo") correspondiente al tipo del valor SQL: getint INTEGER getlong BIG INT getfloat REAL getdouble FLOAT getbignum DECIMAL getboolean BIT getstring VARCHAR getstring CHAR getdate DATE gettime TIME gettimesstamp TIME STAMP getobject cualquier otro tipo Para pasar al siguiente registro se usa el método next() Devuelve false cuando no hay más registros Juan Pavón - UCM 2012-13 JDBC 12

Crear y ejecutar operaciones en la BD Ejemplo (se usa la BD tienda del tema de PHP y MySQL) Statement instruccion = conexion.createstatement(); String query = "SELECT * FROM clientes WHERE nombre LIKE \"Empresa%\""; ResultSet resultados = instruccion.executequery(query); System.out.println("Listado de clientes: "); while (resultados.next()) { System.out.println("Cliente "+resultados.getstring("nif") +", Nombre: "+resultados.getstring("nombre") +", Teléfono: " +resultados.getstring("telefono") ); catch (Exception ex) { e.printstacktrace(); Juan Pavón - UCM 2012-13 JDBC 13 Crear y ejecutar operaciones en la BD ResultSet Por defecto solo se puede recorrer hacia delante Se pueden prever otras formas de utilizarlo al crear el objeto Statement: createstatement(int resultsettype, int resultsetconcurrency) resultsettype: TYPE_FORWARD_ONLY: sólo hacia delante con next() TYPE_SCROLL_INSENSITIVE: métodos de posicionamiento habilitados TYPE_SCROLL_SENSITIVE: métodos de posicionamiento habilitados pero sensible a las operaciones que se puedan hacer a los datos del ResultSet Movimiento hacia atrás: afterlast(), previous() Posicionamiento absoluto: first(), last(), absolute(numfila) Posicionamiento relativo: relative(num) Recupera fila actual: getrow() resultsetconcurrency ResultSet.CONCUR_READ_ONLY: El objeto ResultSet no se puede modificar ResultSet.CONCUR_UPDATABLE: El objeto ResultSet se puede modificar Juan Pavón - UCM 2012-13 JDBC 14

Crear y ejecutar operaciones en la BD ResultSetMetaData Permite obtener información sobre un ResultSet: metadatos Statement instruccion = conexion.createstatement(); String query = "SELECT * FROM clientes"; ResultSet resultados = instruccion.executequery(query); ResultSetMetaData inforesultados = resultados.getmetadata(); int col = inforesultados.getcolumncount(); System.out.println("Estructura de la tabla clientes: "); for (int i = 1; i <= col; i++) { System.out.println("Campo " + inforesultados.getcolumnlabel(i) + "\t" +"Tipo: " + inforesultados.getcolumntypename(i)); catch (Exception ex) { e.printstacktrace(); Juan Pavón - UCM 2012-13 JDBC 15 Crear y ejecutar operaciones en la BD Se pueden consultar de forma genérica los resultados sin conocer su estructura previamente Statement instruccion = conexion.createstatement(); String query = "SELECT * FROM clientes"; ResultSet resultados = instruccion.executequery(query); ResultSetMetaData inforesultados = resultados.getmetadata(); int col = inforesultados.getcolumncount(); while (resultados.next()) { for (int i = 1; i <= col; i++) System.out.print(resultados.getString(i) + "\t"); System.out.println(""); catch (Exception ex) { e.printstacktrace(); Juan Pavón - UCM 2012-13 JDBC 16

Instrucciones preparadas PreparedStatement Cuando se van a ejecutar instrucciones repetidamente, se puede precompilar en la BD y ganar eficiencia Primero se define el modelo de instrucción preparada PreparedStatement ps = conexion.preparestatement("insert INTO clientes VALUES (?,?,?,?) "); Cada parámetro se representan con el símbolo de interrogación? Luego se puede utilizar repetidamente simplemente indicando los parámetros con métodos setx(posición, valor) El método depende del tipo de parámetro La posición comienza en 1 executeupdate devolverá la cantidad de elementos insertados ps.setstring(1, nif); ps.setstring(2, nombre); ps.setstring(3, direccion); ps.setstring(4, email); if (ps.executeupdate()!=1) throw new Exception("Error en la Inserción"); Juan Pavón - UCM 2012-13 JDBC 17 Excepciones SQLException Es obligatorio capturar estas excepciones Se puede obtener información adicional sobre el error getmessage() Mensaje de error de la excepción getsqlstate() Texto de SQLstate según la convención X/Open o SQL:2003 geterrorcode() Código de error (entero) específico del vendedor Hay muchas subclases: BatchUpdateException, RowSetWarning, SerialException, SQLClientInfoException, SQLNonTransientException, SQLRecoverableException, SQLTransientException, SQLWarning, SyncFactoryException, SyncProviderException SQLWarning No es obligatorio capturar estas excepciones Errores leves de objetos Connection, Statement, o ResultSet DataTruncation Subclase de SQLWarning Avisos de truncado de datos en operaciones de lectura o escritura Juan Pavón - UCM 2012-13 JDBC 18

Liberar recursos Normalmente en la cláusula finally para asegurar que se ejecuta Usando el método close() finally { if (resultados!= null) { // liberar los ResultSet resultados.close(); if (instruccion!= null) { // liberar los Statement instruccion.close(); if (conexion!= null) { conexion.close(); catch (Exception e) { e.printstacktrace(); // liberar la conexión a la BD Juan Pavón - UCM 2012-13 JDBC 19 Transacciones En entornos multiusuario (por ejemplo, para aplicaciones web) hay que controlar el acceso concurrente a la BD para evitar inconsistencias Transacción: unidad de trabajo lógica Un conjunto de instrucciones sobre la BD Si algo va mal, hacer marcha atrás al estado anterior Si todo va bien, hacer efectivos los cambios La interfaz Connection ofrece métodos para las transacciones commit() Hace efectivos todos los cambios desde el último commit/rollback Libera los bloqueos de la BD que tuviera el objeto Connection rollback() Deshace todos los cambios realizados en la transacción Libera los bloqueos de la BD que tuviera el objeto Connection Por defecto se funciona en modo autocommit Cada instrucción sobre la BD va en su propia transacción Es seguro pero ineficiente Juan Pavón - UCM 2012-13 JDBC 20

Transacciones Por defecto se funciona en modo autocommit Cada instrucción sobre la BD va en su propia transacción Es seguro pero ineficiente Se desactiva con conexion.setautocommit(false) Para gestionar explícitamente las transacciones (con autocommit false), la interfaz Connection ofrece los métodos commit() Hace efectivos todos los cambios desde el último commit/rollback Libera los bloqueos de la BD que tuviera el objeto Connection rollback() Deshace todos los cambios realizados en la transacción Libera los bloqueos de la BD que tuviera el objeto Connection Se pueden crear puntos de recuperación (savepoints) Savepoint setsavepoint(string name) Permite hacer commit parciales para volver a este punto si fuera necesario con rollback(savepoint) Juan Pavón - UCM 2012-13 JDBC 21 Transacciones settransactionisolation(int level) Intenta establecer un nivel de aislamiento para la transacción en una conexión Dependerá de lo que se haga que se elige un nivel u otro para evitar problemas y permitir la mayor eficiencia TRANSACTION_NONE Otras transacciones no soportadas TRANSACTION_READ_UNCOMMITED Transacción que puede ver los cambios de otra transacción antes de commit Permite lecturas sucias, no repetibles y fantasmas TRANSACTION_READ_COMMITED La lectura de datos antes de commit no está permitida Permite lecturas no repetibles y fantasmas TRANSACTION_REPEATABLE_READ Indica que se pueda leer el mismo dato sin fallar Permite lecturas fantasmas TRANSACTION_SERIALIZABLE Transacción de nivel más alto No permite lecturas sucias, fantasmas ni no repetibles La más segura pero menor rendimiento Juan Pavón - UCM 2012-13 JDBC 22

JDBC en aplicaciones Web Es similar salvo que Normalmente se genera código HTML Hay que gestionar la concurrencia (transacciones) Hibernate Tal como dicen en su web (http://www.hibernate.org/) Inicialmente trataban de facilitar el almacenamiento y recuperación de objetos Java en BD relacionales con un Object/Relational Mapping (ORM) Actualmente son varios proyectos que permiten usar modelos de objetos más allá de ORM Juan Pavón - UCM 2012-13 JDBC 23 Bibliografía The Java Tutorial. A practical guide to programmers. http://docs.oracle.com/javase/tutorial/ Trail: JDBC(TM) Database Access Java API documentation Juan Pavón - UCM 2012-13 JDBC 24