Acceso a bases de datos desde Java: JDBC

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

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

Desarrollo de Software con

Java con Bases de Datos

Java y MySQL. Ciclo de ejecución

JDBC. Francisco Javier Solans Benedí Software Developper

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

Acceso a BD desde Java. JDBC

JDBC. Una mini-introducci. introducción

MySQL con Java en MS Windows

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

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

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

JDBC. Aplicaciones Distribuidas

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

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

INTRODUCCIÓN. El objetivo de este manual es la identificación de los procesos técnicos más

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

JDBC: Conexiones con bases de datos desde Java

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

NORMAS PARA LA ENTREGA DE LOS LABORATORIOS

Acceso a BDs en Java: JDBC

JDBC: Conexiones con bases de datos desde Java

Federico Peinado

Acceso a bases de datos con JDBC

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

C.I.F.: B Inscrita en el Registro Mercantil de Madrid, Tomo Libro 0, Folio 135, Sección 8. Hoja M Inscripción 1ª

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

Programación Orientada a Objetos II. La Plataforma JDBC

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

Bases de datos y JDBC

Práctica sobre compartición de instancias remotas.

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

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

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

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

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

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

Objetivos y Temario CURSO MySQL 5

JDBC: Java DataBase Conectivity

PRÁCTICA Nº 16 CONEXIÓN A UNA BASE DE DATOS, INGRESO Y VISUALIZACIÓN DE REGISTROS

Plugin para NetBeans que realiza migración de una base de datos postgresql a couchdb.

Base de Datos Oracle: desarrollo de aplicaciones

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

BASES DE DATOS AVANZADAS Transacciones en MYSQL

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

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

TEMA 11 INDICE [PROGRAMACIÓN]

Bases de Datos Introducción a la Conectividad de

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

- Compilar y ejecutar programas en Java - Estructura básica de una clase - El comando javac - El comando java - Introducción al IDE de desarrollo

Conexión de Mysql con NetBeans

2.1 Tutorial de JDBC

Qué ofrece Autentia Real Business Solutions S.L?

JSP. MSc. Daniel Alejandro Yucra Sotomayor Pag Web Services. Laboratorio Nro. 11. Web Services con JAX-WS con MySQL. I. Competencia General:

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Java J2SE Standard Programming

JDBC - Acceso a Bases de Datos

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

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

Acceso a bases de datos MySQL con PHP

Programación y Acceso a BD con SQL

Bases de Datos / Elementos de Bases de Datos 2015

II Curso Online JAVA-J2EE

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

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

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

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

JSP JDBC SALVADORES OLAIZOLA,

Un segundo objetivo ha sido la creación de una interfaz de usuario robusta y clara que facilite al usuario el uso de dicho aplicativo.

TUTORIAL CONEXIÓN SQLSERVER CON JAVA DESDE ECLIPSE

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

GESTORES GESTORES DE BASES DE DATOS

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

GUÍA DE TRABAJO GRADO 11. Articulación SENA Programación de Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6

Capítulo IV. Implementación.

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11

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

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Interacción con el Servidor Oracle8. Copyright Oracle Corporation, All rights reserved.

Programación PHP de bases de datos mysql

Programación de Consultas SQL ADO.Net LDP / DUOC-AV

DISPARADORES EN SQL DISPARADORES EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999

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

Programación en Java. Programación en OO

MANUALITO MS-SQL SERVER

MultiBase. Notas a la versión 3.4. BASE 100, S.A.

INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO

Taller de Programación II J2EE

Bases de Datos / Elementos de Bases de Datos Que es un Stored Procedure? Stored Procedures: Ventajas

Guías para la práctica (2): Acceso a Salesforce

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

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

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

Conectar Flash con Access usando MDM Zinc

1. INTRODUCCION Qué es JDBC? Qué hace JDBC? JDBC es un API de bajo nivel y una base para API s de alto nivel

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

Manejo de Bases de Datos Mysql en Lenguaje C

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

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

Transcripción:

Acceso a bases de datos desde Java: JDBC Jesús Arias Fisteus Aplicaciones Web (2016/17) Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 1

Parte I JDBC Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 2

JDBC (Java Data Base Connection) Permite acceder a bases de datos relacionales mediante SQL desde programas Java. Define unas interfaces estándar, comunes para acceder a cualquier sistema gestor de bases de datos relacionales (Oracle, MySQL, etc.) Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 3

JDBC Las interfaces están integradas en la API estándar de J2SE: Paquete java.sql Paquete javax.sql Pero se necesita adicionalmente un driver JDBC, que es una implementación de dichas interfaces: Específico para cada programa gestor de base de datos. Proporcionado habitualmente por el proveedor del gestor. Para MySQL: MySQL Connector/J. Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 4

Principales clases e interfaces Las clases e interfaces principales de JDBC son: java.sql.drivermanager java.sql.connection java.sql.statement java.sql.resultset java.sql.preparedstatment javax.sql.datasource Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 5

Obtener una conexión con DriverManager La clase DriverManager permite obtener objetos Connection con la base de datos. Para conectarse es necesario proporcionar: URL de conexión, que incluye: Nombre del host donde está la base de datos. Nombre de la base de datos a usar. Nombre del usuario en la base de datos. Contraseña del usuario en la base de datos. Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 6

Ejemplo 1 Connection connection ; 2 (...) 3 try { 4 5 String url = " jdbc : mysql :// hostname / database - name "; connnection = 6 DriverManager. getconnection (url, " user ", " passwd "); 7 8 } catch ( SQLException ex) { connection = null ; 9 ex. printstacktrace (); 10 System. out. println (" SQLException : " + ex. getmessage ()); 11 System. out. println (" SQLState : " + ex. getsqlstate ()); 12 System. out. println (" VendorError : " + ex. geterrorcode ()); 13 } Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 7

Uso del objeto Connection Representa el contexto de una conexión con la base de datos: Permite obtener objetos Statement para realizar consultas SQL. Permite obtener metadatos acerca de la base de datos (nombres de tablas, etc.) Permite gestionar transacciones. Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 8

Ejercicios prácticos Práctica 3: Ejercicio 1.1 Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 9

Realizar consultas con Statement Los objetos Statement permiten realizar consultas SQL en la base de datos. Se obtienen a partir de un objeto Connection. Tienen distintos métodos para hacer consultas: executequery: usado para leer datos (típicamente consultas SELECT). executeupdate: usado para insertar, modificar o borrar datos (típicamente sentencias INSERT, UPDATE y DELETE). Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 10

Consulta SELECT mediante Statement Para leer datos, por ejemplo mediante consultas SELECT, se usa habitualmente executequery(). Devuelve un único objeto ResultSet mediante el cual se recorren las filas resultantes. 1 String query = " SELECT nombre, superficie, poblacion " 2 + " FROM Paises "; 3 Statement stmt = connection. createstatement (); 4 ResultSet rs = stmt. executequery ( query ); Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 11

Lectura de los resultados Devuelve un objeto ResultSet que representa el resultado de una consulta: Está compuesto por filas. Se leen secuencialmente las filas, desde el principio hacia el final. En cada fila se recupera mediante métodos los valores de las columnas. El método a usar depende del tipo de datos, y recibe el nombre o número de columna como parámetro: getstring(), getint(), getdate(), etc. Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 12

Lectura de los resultados 1 2 String query = " SELECT nombre, superficie, poblacion " + " FROM Paises "; 3 Statement stmt = connection. createstatement (); 4 ResultSet rs = stmt. executequery ( query ); 5 while (rs. next ()) { 6 String name = rs. getstring (" nombre "); 7 double area = rs. getdouble (" superficie "); 8 int population = rs. getint (" poblacion "); 9 System. out. println ( name + " " + area 10 + " (" + population + ")"); 11 } Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 13

Liberación de recursos Las consultas en progreso consumen recursos tanto en la base de datos como en el programa cliente. Se puede liberar los recursos consumidos por objetos ResultSet y Statement mediante el método close(). Los objetos ResultSet se cierran automáticamente cuando se cierra su objeto Statement asociado, o se hace una nueva consulta sobre él. Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 14

Liberación de recursos Los objetos Connection disponen de un método close que cierra la conexión con la base de datos. Si hay una transacción en curso, es recomendable finalizarla (commit o rollback) antes de cerrar la conexión. Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 15

Liberación de recursos Desde JSE 7 se puede utilizar la sentencia try-with-resources para liberar automáticamente los recursos: Se invoca automáticamente el método close() de los recursos indicados en la sentencia, incluso si ocurren excepciones, se ejecuta return, etc. Más información en The Java Tutorials: The try-with-resources Statement Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 16

Liberación de recursos (a partir de JSE 7) 1 public List <Book > listbooks () throws SQLException { 2 List <Book > books = new ArrayList <Book >() ; 3 try ( Statement stmt = connection. createstatement ()) { 4 String query = " SELECT id, title, isbn, year FROM Books "; 5 ResultSet rs = stmt. executequery ( query ); 6 while (rs. next ()) { 7 (...) 8 } 9 } 10 return books ; 11 } Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 17

Liberación de recursos (a partir de JSE 7) 1 public List <Book > listbooks () { 2 List <Book > books = new ArrayList <Book >() ; 3 try ( Statement stmt = connection. createstatement ()) { 4 String query = " SELECT id, title, isbn, year FROM Books "; 5 ResultSet rs = stmt. executequery ( query ); 6 while (rs. next ()) { 7 (...) 8 } 9 } catch ( SQLException e) { 10 books = null ; 11 } 12 return books ; 13 } Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 18

Ejercicios prácticos Práctica 3: Ejercicio 1.2 Ejercicio 1.3 Ejercicio 1.4 Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 19

Inserción, borrado y modificación de datos Para insertar, eliminar o modificar datos se suele utilizar el método executeupdate() de Statement. Por ejemplo, con consultas INSERT, UPDATE y DELETE. El método devuelve el número de filas afectadas (insertadas, actualizadas o eliminadas). 1 String query = " UPDATE Paises SET poblacion =45000000 " 2 + " WHERE id =1"; 3 Statement stmt = connection. createstatement (); 4 int rowcount = stmt. executeupdate ( query ); Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 20

Valor de campos auto-incremento Cuando se inserta una nueva fila, y esta tiene una columna con auto-incremento, puede ser necesario conocer el identificador asignado por la base de datos: El método getgeneratedkeys() de Statement devuelve un ResultSet con los valores de auto-incremento asignados en la última consulta. Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 21

Valor de campos auto-incremento 1 String query = " INSERT INTO Continentes " 2 + "( nombre, superficie, poblacion ) " 3 + " VALUES (' Africa ', 30370000, 1100000000) "; 4 Statement stmt = connection. createstatement (); 5 stmt. executeupdate ( query, Statement. RETURN_GENERATED_KEYS ); 6 7 ResultSet rs int rowid ; = stmt. getgeneratedkeys (); 8 if (rs. next ()) { 9 rowid = rs. getint (1) ; 10 } else { 11 12 // Ha fallado rowid = -1; la inserci ón? 13 } Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 22

Consultas con PreparedStatement La interfaz PreparedStatement es útil cuando se repite muchas veces una consulta similar, cambiando sólo algún parámetro. La consulta se compila sólo cuando se crea el objeto, acelerando así las peticiones que se realicen posteriormente. Cuando la consulta se construye con información que proviene del usuario, protege contra ataques de inyección de SQL. Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 23

Consultas con PreparedStatement 1 PreparedStatement updatesales = 2 conn. preparestatement (" UPDATE Coffees SET sales =? WHERE name =?"); 3 (...) 4 updatesales. setint (1, 75) ; 5 updatesales. setstring (2, " Colombian "); 6 updatesales. executeupdate (); Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 24

Seguridad ( muy importante!) El programa que accede a la base de datos en una aplicación Web debe estar protegido frente a ataques de inyección de SQL: No se debe incluir en una consulta texto literal proporcionado por el usuario sin controlar posibles caracteres reservados de SQL que pudiese tener. Las consultas con PreparedStatement no se ven afectadas, porque se compilan antes de introducir la información proporcionada por el usuario. Se verá esto en profundidad en la clases dedidadas a seguridad en aplicaciones Web. Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 25

Transacciones en JDBC El objeto Connection define el contexto de las transacciones. Métodos relevantes: gettransactionisolation() settransactionisolation() getautocommit() setautocommit() commit() rollback() Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 26

Transacciones en JDBC 1 boolean success = false ; 2 connection. settransactionisolation ( Connection. TRANSACTION_REPEATABLE_READ ); 3 connection. setautocommit ( false ); 4 try ( Statement stmt = connection. createstatement ()) { 5 //... consultas de la transacci ón 6 if (...) { 7 success = true ; 8 } 9 } finally { 10 if ( success ) { 11 connection. commit (); 12 } else { 13 connection. rollback (); 14 } 15 connection. setautocommit (true ); 16 } Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 27

Reutilización de conexiones Establecer una conexión con la base de datos supone un retardo y consumo de recursos en el cliente, base de datos y red. Es buena práctica reutilizar las conexiones para varias consultas, en vez de abrir una nueva conexión cada vez que se haga una consulta. Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 28

Reutilización de conexiones En programas ejecutados en concurrencia (por ejemplo, aplicaciones Web) es habitual mantener un pool de conexiones permanentemente abiertas y reutilizarlas: 1. El programa obtiene un objeto Connection del pool. 2. Se realizan una o más consultas sobre este objeto. 3. Cuando ya no es necesario, se devuelve al pool. 4. El pool es compartido por todos los hilos concurrentes de la aplicación. Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 29

Reutilización de conexiones La interfaz javax.sql.datasource de JDBC: Proporciona un mecanismo alternativo a DriverManager para obtener objetos Connection. Gestiona opcionalmente las conexiones en modo pool. Necesita un servicio de nombres JNDI (los principales servidores Web Java proporcionan este servicio). Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 30

Ejercicios prácticos Práctica 3: Ejercicio 1.5 Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 31

Referencias Maydene Fisher, Jon Ellis, Jonathan Bruce. JDBC API Tutorial and Reference, Third Edition. Prentice Hall. http://proquest.safaribooksonline.com/book/ programming/java/0321173848 Capítulos 1 ( Introduction ) y 2 ( Basic Tutorial ) Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 32

Parte II Persistencia de objetos Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 33

Persistencia de objetos Los entornos de persistencia de objetos se encargan de guardar y recuperar objetos Java en bases de datos: El programador no necesita programar código JDBC ni consultas SQL. Los objetos se representan siguiendo el convenio de Java Beans (propiedades privadas, métodos get/set, constructor sin parámetros). El entorno realiza la conversión entre tipos Java y tipos SQL. El entorno crea y ejecuta las consultas SQL necesarias. Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 34

Ejemplo de Java Bean 1 public class Book { 2 private String title ; 3 private String isbn ; 4 private int year ; 5 6 7 public String gettitle () return title ; { 8 } 9 10 11 public void settitle () { this. title = title ; 12 } 13 14 (...) 15 } Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 35

JPA Java Persistence API (JPA) proporciona una interfaz estándar para entornos de persistencia de objetos. Existen múltiples implementaciones de JPA: Hibernate. OpenJPA. Eclipse Link.... Aplicaciones Web (2016/17) Acceso a bases de datos desde Java: JDBC 36