Lenguaje Java Avanzado

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

ARTE I BASE DE DATOS EN JAVA

Laboratorio de Programación III

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

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

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

JAVA 5. Conexión con Bases de Datos

Acceso a BD desde Java. JDBC

Conexión JDBC. Tecnicatura Superior en Programación UTN-FRM Programación 3

JDBC: Java DataBase Conectivity

Acceso a bases de datos desde Java: JDBC

Base de Datos MySQL. 4.1 MySQL. Capítulo Características de mysql

Objetivos y Temario CURSO MySQL 5

PROGRAMACIÓN CON ACCESO A DATOS

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

Acceso a BDs en Java: JDBC

Java y MySQL. Ciclo de ejecución

JDBC. Francisco Javier Solans Benedí Software Developper

Federico Peinado

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

Creando CRUD en PHP: operaciones básicas para la gestión de bases de datos

T07 Opciones de integridad referencial

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

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

Unidad IV. Aplicaciones sobre Base de Datos

JDBC. Aplicaciones Distribuidas

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

Java y MySQL. Ciclo de ejecución

SUBCONSULTAS SQL. Cuando se ejecuta una consulta que contiene una subconsulta, la subconsulta se ejecuta por cada fila de la consulta principal.

Manejo de Bases de Datos Mysql en Lenguaje C

Desarrollo de Software con

Bases de Datos Relacionales y SQL: Una Introducción

Manual de Sentencias Básicas en SQL

ÍNDICE. Introducción... Capítulo 1. Características, instalación, inicio y entorno de trabajo... 1

El SQL es un lenguaje estándar de programación para el acceso a bases de datos.

Integración script de servidor con los sistemas gestores de base de datos

GESTORES GESTORES DE BASES DE DATOS

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

UTIM Universidad Tecnológica de Izúcar de Matamoros

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

MySQL por línea de comandos

Gestión de la Información Práctica 1

CONECTIVIDAD CON BASES DE DATOS

MySQL con Java en MS Windows

Capa de Gestión de Datos. Persistencia Bases de Datos - JDBC

JDBC. Una mini-introducci. introducción

Apuntes de Java. Tema 12: JDBC. Uploaded by Ingteleco

NORMAS PARA LA ENTREGA DE LOS LABORATORIOS

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

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

INTRODUCCIÓN A LAS BASES DE DATOS. L.I Gerardo Benavides Pérez

LEA ATENTAMENTE LAS PREGUNTAS Y RESUELVA CADA EJERCICIO COMO SE INDIQUE (EN CASO CONTRARIO EL EJERCICIO NO PUNTUARÁ) CADA EJERCICIO VALE UN PUNTO

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

//Sección de manejo de excepciones. Las rutinas de manejo de errores //aparecen aqui

MANUAL DE PROGRAMACIÓN PARA BASES DE DATOS 1.0 MySQL

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

Acceso a bases de datos con JDBC

Un proyecto de IBM llamado Sistem/R construye un prototipo simple llamado SQUARE que después se transformó en SQL.

Java con Bases de Datos

Tema 1. Introducción a MySQL. José Muñoz Jimeno Octubre 2015

Introducción a SQL (DDL)

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

1. Lenguaje de Definición de Datos. 2. Lenguaje de Manipulación de. Datos. M. C. Gustavo Alfonso Gutiérrez Carreón

Tablas -SQL Curso Bases de Datos. Por Elizabeth León Guzmán, Ph.D. Profesora Ingeniería de Sistemas Grupo de Investigación MIDAS

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

SQL - DDL y consultas de actualización. José Muñoz Jimeno Febrero 2015

Python y SQLite Por Rafael Hernampérez Martín

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

Bases de Datos Introducción a la Conectividad de

LENGUAJE DE CONSULTA ESTRUCTURADO (SQL)

Desarrollo de aplicaciones de acceso a base de datos con JBuilder 7

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

ADMINISTRACION DE ORACLE 9i Guía de estudio (OCA) TEMA 1

2 - Para instalar PostgreSQL. # apt-get install postgresql

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

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

Programación con acceso a base de datos

Modelamiento y Diseño de Base de Datos

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

Los procedimientos almacenados son nuevas funcionalidades de la versión de MySQL 5.0. Un procedimiento

Tutorial MySql - 1 -

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

1. DML. Las consultas de resumen

Introducción a Bases de Datos. Pablo Zaidenvoren

USO DEL ENTORNO DE NETBEANS PARA EL ACCESO DE LA BASE DE DATOS Y EL PAQUETE JAVA.SQL

Iniciación al trabajo con bases de datos

TEMA 5: MODIFICACIÓN DE LA BASE DE DATOS EN SQL

Instalacion de PostgreSQL en Ubuntu 8.4

Tutorial de incorporación del driver JDBC a Eclipse. Programación en Internet

PHP y Acceso a Datos

SQL SERVER APLICADO (SSA010)

Base de Datos. Docente: Ing. Francisco Rodríguez BASE DATOS. Resultados. Internet. Requerimientos

SQL. Amparo López Gaona. México, D.F. Noviembre 2003

SQL Sintaxis. Ejemplo de Alumno, Curso, Profesor. Esquemas de Alumno, Curso, Profesor. Andrés Moreno S.

APUNTES: APLICACIONES WEB BASADAS EN PHP Y MYSQL Página 1 de 5

BASES DE DATOS AVANZADAS Transacciones en MYSQL

PRÁCTICA DE ADO.NET. Algunos tipos de datos más utilizados son los siguientes:

EXAMEN DE BASES DE DATOS 11/06/04 Esquema de trabajo

ÍNDICE INTRODUCCIÓN...17

Acceso a bases de datos MySQL con PHP

Transcripción:

Lenguaje Java Avanzado Sesión 7: Java Database Connectivity 2012-2013 Depto. Ciencia de la Computación e IA

Puntos a tratar Introducción Drivers de acceso a bases de datos Conexión con la base de datos Consulta a una base de datos Restricciones y movimientos en el ResultSet Sentencias de actualización Otras llamadas a la BD Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-2

Introducción JDBC es el API de Java para acceder a sistemas de gestión de bases de datos (SGBD) Al hacer uso del API nos va a permitir cambiar de SGBD sin modificar nuestro código JDBC es una especie de puente entre nuestro programa Java y el SGBD Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-3

Esquema de uso de JDBC Aplicación 1.Establece una conexión 2. Interrogar y actualizar la BD 3. Procesar los resultados JDBC API DB API JDBC Driver Base de datos Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-4

Drivers de acceso Para acceder a una BD necesitamos un driver específico Cada BD suele disponer de un API de acceso propietario Si usamos ese API, un cambio en la BD provocaría cambios en nuestro código El driver es específico para esa BD, al cambiar la BD sólo tenemos que cambiar el driver El driver traduce la llamada JDBC en la correspondiente llamada al API de la BD Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-5

Tipos de drivers Tipo 1: Puente JDBC-ODBC Proporciona conectividad entre Java y cualquier base de datos en Microsoft Windows, mediante ODBC No se aconseja su uso. Limita las funcionalidades de las BD Cada cliente debe tener instalado el driver J2SE incluye por defecto este driver (Windows y Solaris) Aplicación Java BD API JDBC Puente JDBC-ODBC API ODBC Capa ODBC Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-6

Tipos de drivers Tipo 2: Parte Java, parte driver nativo El driver actúa como traductor de la llamada Java a una llamada del API de la BD. Necesita el API de forma local (no usar en Internet) Es un paso menos que el anterior, pues no tenemos que pasar por el gestor ODBC (más rápido) Cada cliente necesita el driver Aplicación Java BD API JDBC Driver JDBC API Específico Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-7

Tipos de drivers Tipo 3: Servidor intermediario de acceso a BD Proporciona una mayor abstracción Dispondremos de un componente servidor intermedio, que gestiona la conexión con una o varias BD Determinados servidores Java EE implementan este driver Útil para aplicaciones escalables y portables Aplicación Java BD API JDBC Driver JDBC Servidor de Driver JDBC Driver nativo Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-8

Tipos de drivers Tipo 4: Drivers Java El más directo La llamada JDBC se traduce en una llamada a la propia BD, por la red y sin intermediarios Mejor rendimiento La mayoría de SGBD disponen de este driver Aplicación Java BD API JDBC Puente JDBC Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-9

Sobre los distintos tipos Podemos disponer de drivers de distinto tipo para acceder a la misma BD Por ejemplo, MySQL desde su propio driver y desde ODBC Debemos tener en cuenta que un tipo de driver puede limitar las funcionalidades de la BD. En este caso, si utilizamos ODBC no tendremos acceso al control de transacciones de MySQL Resumiendo, utilizar siempre el driver del fabricante Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-10

Instalación de drivers Descargamos el driver específico para nuestra BD (normalmente es un.jar) Lo añadimos al CLASSPATH export CLASSPATH=$CLASSPATH:/dir-donde-este/fichero Lo cargamos de forma dinámica dentro de nuestro código Java: MySQL: Class.forName("com.mysql.jdbc.Driver"); Podéis encontrar también la clase org.gjt.mm.mysql.driver PostGres: Class.forName("org.postgresql.Driver"); ODBC: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Se deben capturar las excepciones ClassNotFoundException Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-11

Conexión a la BD Primero debemos conectarnos con la BD Connection con = DriverManager.getConnection(url); Connection con = DriverManager.getConnection(url, login, password); El url cambiará de una BD a otra, pero todas mantendrán el siguiente formato: jdbc:<subprotocolo>:<nombre> jdbc siempre subprotocolo es el protocolo a utilizar. nombre es la dirección (o el nombre) de la BD Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-12

Ejemplos de conexiones MySQL Connection con = DriverManager.getConnection( "jdbc:mysql://localhost/bd", "miguel", "m++24"); PostGres Connection con = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/bd", "miguel", "m++24"); ODBC Connection con = DriverManager.getConnection("jdbc:odbc:bd"); Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-13

DriverManager Este objeto gestiona todo el paso de información con el driver Algunos métodos útiles de esta clase: DriverManager.setLogWriter(new PrintWriter(System.out, true)); // Muestra por la salida estándar cualquier operación que se realice con el driver DriverManager.println("Esto es un mensaje"); // Nos permite depurar nuestro código Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-14

Consulta a una BD La conexión a la BD la podemos utilizar para consultar, insertar o borrar datos Todas estas operaciones se realizarán mediante SQL La clase Statement nos permitirá realizar estas acciones Para crear un objeto de esta clase Statement stmt = con.createstatement(); Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-15

Consulta (Query) Para consultar datos utilizamos el método executequery de la clase Statement ResultSet result = stmt.executequery(query); query es un String que contiene la sentencia SQL La llamada al método nos devuelve un objeto de la clase ResultSet La respuesta es una tabla que contendrá una serie de campos y unos registros, dependiendo de la consulta realizada Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-16

Ejemplo de consulta String query = "SELECT * FROM ALUMNOS WHERE sexo = 'M'"; ResultSet result = stmt.executequery(query); Imaginemos que la tabla ALUMNOS tiene tres campos, el resultado almacenado en result es exp nombre sexo Registro 1286 Amparo M 1287 Manuela M 1288 Lucrecia M Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-17

Acceso a los valores de ResultSet La clase ResultSet dispone de un cursor que nos permite movernos por los registros Cuando ejecutamos la llamada, el cursor está en la posición anterior al primer registro Para mover el cursor a la siguiente posición utilizaremos el método next de ResultSet next devuelve cierto si ha conseguido pasar al siguiente registro y falso si se encuentra en el último Para acceder a los datos del ResultSet, haremos un bucle como este: while(result.next()) { // Leer registro } Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-18

Obtención del valor de los campos El cursor está situado en un campo Para obtener los valores de los campos utilizaremos los métodos getxxxx(campo) donde XXXX es el tipo de datos Java de retorno El tipo de datos del campo debe ser convertible al tipo de datos Java especificado El campo se especifica mediante un String o mediante un índice entero, cuyo valor dependerá de la consulta realizada Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-19

Tipos de datos Los principales métodos que podemos utilizar son: getint getdouble getboolean getstring getdate gettime Datos enteros Datos reales Campos booleanos (si/no) Campos de texto Tipo fecha (devuelve Date) Tipo fecha (devuelve Time) Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-20

Ejemplo int exp; String nombre; String sexo; while(result.next()) { exp = result.getint("exp"); nombre = result.getstring("nombre"); sexo = result.getstring("sexo"); System.out.println(exp + "\t" + nombre + "\t" + sexo); } Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-21

Posible problema Un campo entero de la base de datos puede ser nulo, pero un int de Java no Si el campo a consultar no contiene ningún valor, la llamada a get devuelve 0, si es número, y null si es un objeto En el caso de exp, cómo distinguimos un usuario con expediente cero de uno que no tiene expediente? Podemos llamar al método wasnull(), que devuelve cierto si el último registro consultado no tenía un valor asignado Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-22

Ejemplo String sexo, nombre; int exp; while(result.next()) { exp = result.getint("exp"); if (result.wasnull()) System.out.print("Sin expediente asignado"); else System.out.print(exp); nombre = result.getstring("nombre"); System.out.print("\t" + nombre); } sexo = result.getstring("sexo"); System.out.println("\t" + sexo); Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-23

Restricciones en la llamada Cuando interrogamos una BD, el resultado devuelto puede ser extremadamente grande Podemos limitar el número de registros a devolver Disponemos de dos métodos en la clase Statement, getmaxrows y setmaxrows que nos devuelve y cambia el máximo número de filas Por defecto está a 0 (no hay restricciones) Si cambiamos el valor (p.e. 30), una consulta no devolverá más de 30 registros Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-24

Movimientos en el ResultSet Hasta ahora hemos utilizado el método next para movernos por el ResultSet Podemos crear un ResultSet arrastable que nos permita movernos de forma no lineal Primero tenemos que crear un objeto Statement de la siguiente manera: Statement createstatement ( int resultsettype, int resultsetconcurrency) Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-25

Valores de resultsettype ResultSet.TYPE_FORWARD_ONLY Valor por defecto. Sólo permite el desplazamiento hacia delante ResultSet.TYPE_SCROLL_INSENSITIVE Permite el desplazamiento. Si se cambian los datos que estamos visualizando en la BD, los datos mostrados no cambian ResultSet.TYPE_SCROLL_SENSITIVE Permite el desplazamiento y cualquier cambio en la BD afecta a los datos visualizados El mostrar los cambios que se produzcan en la BD dependerá de la BD y del driver que estemos utilizando Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-26

Valores de resultsetconcurrency ResultSet.CONCUR_READ_ONLY Valor por defecto. Cualquier cambio en el ResultSet no tiene efecto en la BD ResultSet.CONCUR_UPDATABLE Permite que los cambios efectuados en el ResultSet tengan efecto en la BD Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-27

Movimientos en el ResultSet Una vez realizada la consulta y obtenido el ResultSet arrastable, podemos usar: next previous last first absolute(int fila) relative(int fila) getrow islast isfirst Pasa a la siguiente fila Ídem fila anterior Ídem última fila Ídem primera fila Pasa a la fila número fila Pasa a la fila número fila desde la actual Devuelve la número de fila actual Devuelve si la fila actual es la última Ídem la primera Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-28

Modificación del ResultSet Para modificar un campo del registro actual, usaremos updatexxxx (igual que getxxxx) updatexxxx recibe dos parámetros, nombre del campo a modificar y nuevo valor del campo Para que los cambios tengan efecto debemos llamar a updaterow rs.updatestring("nombre","manolito"); rs.updaterow(); Para desechar los cambios del registro actual, antes de llamar a updaterow, llamaremos a cancelrowupdates Para borrar el registro actual, usaremos deleterow. La llamada a este método deja una fila vacía en el ResultSet. Si intentamos acceder a ese registro se producirá una excepción El método rowdeleted nos dice si el registro ha sido eliminado Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-29

Restricciones Para poder hacer uso de un ResultSet arrastable, la sentencia SELECT que lo genera debe: Referenciar sólo una tabla No contener una cláusula join o group by Seleccionar la clave primaria de la tabla En el ResultSet disponemos de un registro especial, llamado de inserción. Nos permite introducir nuevos registros en la tabla Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-30

Sentencias de actualización La clase Statement incorpora un método para realizar actualizaciones: executeupdate Recibe una cadena que es la sentencia SQL a ejecutar: CREATE (creación de tablas) INSERT (inserción de datos) DELETE (borrado de datos) El método executeupdate devuelve un entero que indica el número de registros afectados (CREATE devuelve siempre 0) Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-31

Ejemplos String st_crea = "CREATE TABLE ALUMNOS ( exp INTEGER, nombre VARCHAR(32), sexo CHAR(1), PRIMARY KEY (exp) )"; stmt.executeupdate(st_crea); String st_inserta = "INSERT INTO ALUMNOS (exp, nombre, sexo) VALUES(1285, 'Manu', 'M')"; stmt.executeupdate(st_inserta); String st_actualiza = "UPDATE FROM ALUMNOS SET sexo = H' WHERE exp = 1285"; stmt.executeupdate(st_actualiza); String st_borra = "DELETE FROM ALUMNOS WHERE exp = 1285"; stmt.executeupdate(st_borra); Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-32

Otras llamadas a la BD Si no conocemos de antemano el tipo de consulta (la ha introducido el usuario), podemos utilizar el método execute de la clase Statement. El método devuelve un valor booleano, siendo cierto si hay resultados y falso en el caso de una sentencia de actualización Si es falso, podemos llamar al método getupdatecount de Statement que nos dice el número de registros afectados Si hay resultados, los podemos obtener con el método getresultset de Statement. Este método devuelve un ResultSet Si hemos ejecutado un procedimiento en la BD, es posible que tengamos más de un ResultSet El método getmoreresult nos devuelve cierto si existen más resultados. Después de esta llamada podemos volver a llamar a getresultset para conseguir el siguiente resultado Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-33

Otras llamadas a la BD Si queremos ejecutar varias sentencias SQL a la vez, podemos utilizar el método executebatch No permite sentencias de tipo SELECT Para añadir sentencias usaremos el método addbatch executebatch devuelve un array de enteros indicando el número de registros afectados en cada sentencia Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-34

Ejemplo stmt.addbatch("insert INTO ALUMNOS(exp, nombre, sexo) VALUES(1285, 'Manu', 'M')"); stmt.addbatch("insert INTO ALUMNOS(exp, nombre, sexo) VALUES(1299, 'Miguel', 'M')"); int[] res = stmt.executebatch(); Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-35

Otras llamadas a la BD Obtener claves generadas Útil para inserciones en campos autonuméricos ResultSet res = sentsql.getgeneratedkeys(); if(res.next()) { id = res.getint(1); } Lenguaje Java Avanzado 2012-2013 Depto. Ciencia de la Computación e IA JDBC-36

Preguntas...? 2012-2013 Depto. Ciencia de la Computación e IA