JDBC. Una mini-introducci. introducción



Documentos relacionados
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

JDBC: Java DataBase Conectivity

Acceso a BDs en Java: JDBC

Acceso a BD desde Java. JDBC

Programación Orientada a Objetos II. La Plataforma JDBC

NORMAS PARA LA ENTREGA DE LOS LABORATORIOS

2.1 Tutorial de JDBC

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

myappgen Usted Construye la aplicación mientras la ejecuta

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

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

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

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

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

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

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

Bases de Datos Introducción a la Conectividad de

Federico Peinado

MySQL con Java en MS Windows

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

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

Formato para prácticas de laboratorio

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

Tutorial de Unity 3D Tema 52 Bases de Datos. Tutorial de Unity 3D. Bases de Datos

Base de datos relacional

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

JDBC. Francisco Javier Solans Benedí Software Developper

Oracle 12c DISEÑO Y PROGRAMACIÓN

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

Introducción a JDBC - Base de datos con Java

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

Práctica sobre compartición de instancias remotas.

Microsoft SQL Server 2005

Manual del Protocolo XML-RPC de Mensajería Negocios

Software de Comunicaciones (2) Manual de Usuario Consola

1

Manual de NetBeans y XAMPP

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

Registro y Comunicación Automatizada a Bases de Datos

PHP Y BASES DE DATOS. Introducción a SQL

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

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

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

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

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

Guía de Instalación. Versiones del documento

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

BASE DE DATOS RELACIONALES

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

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

Uso de excepciones en Java

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

Acceso a bases de datos desde Java: JDBC

Desarrollo de Software con

CESAR BUSTAMANTE

&' ' ' !,- (& ', Este tutorial trabaja sobre NetBeans 6.1 y MySQL 5.0. Crear un nuevo proyecto usando la ventana que se indica a continuación: !!

Manual de Bajus. Gilberto José Vento Alvarez

ADMINISTRACIÓN DE BASE DE DATOS

JOOMLA MANUAL USUARIO Creación del portal

PHPMYADMIN Y MYSQL. Para gestionar la base de datos MySQL, lo haremos desde la aplicación PhpMyAdmin.

Bases de datos y JDBC

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

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

Acceso a bases de datos con JDBC

Dossier de prácticas

Formas de llevar a cabo un backup de una base de datos MySQL

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

REQUERIMIENTO RESPUESTA

Bases de Datos DB API

MSSQL Server Java

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

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

Práctica 7. Pruebas. Introducir conceptos básicos de pruebas unitarias en sistemas orientados a objetos.

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

Sistemas de Datos Curso: Ernesto Chinkes. Subconsultas Stored Procedures - Triggers

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

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

REQUISITOS DEL SISTEMA. Software Servidor. Cliente. Hardware Servidor. Cliente

JOOMLA MANUAL USUARIO Creación del portal

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

Programación Orientada a Objetos. Java: Excepciones

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

INTRODUCCION A LOS SGBD

INDICE Qué es SQLyog Instalación del programa...4

Métricas para Informes de Pruebas de Rendimiento.

Acceso a bases de datos MySQL con PHP

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

Acceso a bases de datos desde Java: JDBC

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

Manual de JSP con MySQL

Transcripción:

JDBC Una mini-introducci introducción

Introducción JDBC (Java DataBase Connectivity) Protocolo para utilizar bases de datos relacionales desde Java Se basa en la utilización n de drivers que implementan un API predefinido Una vez seleccionado el driver el resto del código es independiente del SGBD

Paquetes Java para JDBC 2 paquetes java.sql javax.sql (más s avanzado) La mayor parte de las aplicaciones sólo s requieren java.sql

java.sql Clases e interfaces:

Estructura JDBC

Para comunicar Java con un SGBD Hay que conocer: Fichero físico f que contiene el driver (jar/zip)) (debe estar incluido en el CLASSPATH de la aplicación) Nombre de la clase driver de Java (opcional) URL de conexión Estos valores dependen de cada SGBD, e incluso del driver concreto

Algunos driver JDBC * MySql o Clase Driver : com.mysql.jdbc.driver o URL de Conexión: n: jdbc:mysql://< ://<host>/< >/<database> o Fichero.jar. jar/. /.zip: mysql-connector connector-java-5.0.4-bin.jar * DB2 o Clase Driver : com.ibm.db2.jdbc.app.db2driver o URL de Conexión:: n:: jdbc:db2:< :<database> o Fichero.jar. jar/. /.zip:: db2java.zip * Sybase o Clase Driver : com.sybase.jdbc2.jdbc.sybdriver jdbc.sybdriver o URL de Conexión: n: jdbc:sybase:tds:< :<host>:< >:<port>/< >/<database> o Fichero.jar. jar/. /.zip:: jconn2.jar jar * Oracle o Clase Driver : oracle.jdbc.driver.oracledriver o URL de Conexión: n: jdbc:oracle:thin:@ :@ <host< host>:< >:<port>:< >:<sid> o Fichero.jar. jar/. /.zip:: classes12.zip * SQLServer o Clase Driver : com.microsoft.jdbc.sqlserver.sqlserverdriver o URL de Conexión: n: jdbc:microsoft:sqlserver:// ://localhost:1433 o Fichero.jar. jar/. /.zip: mssqlserver.jar, msbase.jar, msutil.jar * PostgreSQL o Clase Driver: org.postgresql.driver o URL de Conexión: n: jdbc:postgresql://< ://<server>:< >:<port>/< >/<database> o Fichero.jar. jar/. /.zip: postgresql.jar

Programas Java con JDBC Fases: 1. Establecer la conexión n con la BBDD (clase Connection) 2. Crear una sentencia SQL (clase Statement o PreparedStatement) 3. Lanzar la sentencia 4. Tratar el resultado (clase ResultSet)

Fase 1: Establecer la conexión (ejemplo) Connection connection = null Statement statement = null; ResultSet resultset = null; try { String driverclassname = "com.mysql.jdbc.driver" com.mysql.jdbc.driver"; String driverurl = "jdbc:mysql" jdbc:mysql:// ://localhost/barcos"; String user = "bertoldo" bertoldo"; String password = "gominolas" gominolas"; Class.forName(driverClassName); connection = DriverManager.getConnection(driverUrl, user, password);...

Fase 1.1 Comprobamos la existencia del driver: try { String driverclassname = "com.mysql.jdbc.driver" com.mysql.jdbc.driver"; String driverurl = "jdbc:mysql" jdbc:mysql:// ://localhost/barcos"; String user = "bertoldo" bertoldo"; String password = "gominolas" gominolas"; Class.forName(driverClassName); connection = DriverManager.getConnection(driverUrl, user, password);... Si se produce una excepción n debe comprobarse que el fichero físico f existe y está en el classpath

Fase 1.2 Nombre de la conexión n URL try { String driverurl = "jdbc:mysql" jdbc:mysql:// ://localhost/barcos";... La forma general de la conexión n para mysql es: jdbc:mysql://< ://<host>/< >/<database>

Fase 1.3 Abrimos la conexión: n: Connection connection = null Statement statement = null; ResultSet resultset = null; try { String driverclassname = "com.mysql.jdbc.driver" com.mysql.jdbc.driver"; String driverurl = "jdbc:mysql" jdbc:mysql:// ://localhost/barcos"; String user = "bertoldo" bertoldo"; String password = "gominolas" gominolas"; Class.forName(driverClassName); connection = DriverManager.getConnection(driverUrl, user, password);... Normalmente los nombres de usuario y su password los introduce el usuario

Fases 2 y 3 La sentencia depende del dialecto SQL del SGBD: Statement statement = null; ResultSet resultset = null; try { statement = connection.createstatement(); String query = "SELECT * FROM Batallas;"; resultset = statement.executequery(query); La sentencia puede ser cualquier válida v en SQL del SGBD (Insert( Insert, Delete, Create Table,, etc..)

Fase 4 Tratar el resultado: ResultSet resultset = null; try { while (resultset.next( resultset.next()) { // una forma de obtener una columna: por posición String nombre = resultset.getstring(1); // otra forma de obtener una columna: por su nombre Date fecha = resultset.getdate("fecha"); System.out.println("Nombre: " + nombre+ " Fecha: "+fecha); }

Errores Se pueden producir errores por: Fallo en la conexión No existe la base de datos o no se tienen permisos sobre ella Error de sintaxis en la sentencia SQL Operación n no permitida Se producirá una excepción n en el programa

Excepciones try { // las 4 fases descritas anteriormente } catch (ClassNotFoundException e) { System.out.println("No se encuentra el driver"); } catch (SQLException E) { System.out.println(" ("Excepcion SQL: " + E.getMessage()); System.out.println("Estado SQL: " + E.getSQLState()); System.out.println("C ("Código del Error: " + E.getErrorCode()); }

Liberar Recursos Aunque no se llame a Connection.close, cuando la conexión sea eliminada por el garbage collector, el método finalize de la clase que implementa Connection, invocará al método close Cuando se cierra una conexión, cierra todos sus Statements asociados Cuando se cierra un Statement, cierra todos sus ResultSets asociados Pero: En una aplicación multi-thread que solicita muchas conexiones por minuto (ej.: una aplicación Internet) Puede haber bugs en algunos drivers, de manera que no cierren los Statements asociados a una conexión o los ResultSets asociados a un Statement Es imprescindible cerrar las conexiones tan pronto como se pueda

Liberando recursos try { // las 4 fases descritas anteriormente } catch finally { try { if (resultset(!= null) resultset.close(); if (statement(!= null) statement.close(); if (connection(!= null) connection.close(); } catch (SQLException e) { e.printstacktrace(); } }

PreparedStatement Cada vez que se envía una query a la BD, ésta: La analiza sintácticamente Construye un plan para ejecutarla Si tenemos un bucle en el que repetidamente se lanza la misma query con distintos parámetros ineficiencia usando Statement En este tipo de situaciones, es mejor usar PreparedStatement

Ejemplo PreparedStatement Ejemplo: // establecer la conexión String [] nombrebatallas={ ={..}; Date [] fechabatallas={ ={..}; // de la misma long. que el anterior String query = "INSERT INTO Batallas (nombre,fecha) VALUES (?,?);"; preparedstatement = connection.preparestatement(querystring); /* insertamos las batallas en la BD */ for (int i=0; i<nombrebatallas.length; i++) { // rellenamos el parámetro 1 y 2 preparedstatement.setstring(1, nombrebatallas[i]); preparedstatement.setdate(2, balances[i]); // ejecutar la consulta int filas = preparedstatement.executeupdate(); if (filas!= 1) { throw new SQLException( Problemas insertando + nombrebatallas[i]); }

Ejemplo PreparedStatement (II) En el ejemplo anterior: Sólo se hace el análisis sintáctico una vez Se hace un único plan de ejecución Mejor eficiencia con respecto a Statement

Lo que no hemos contado Hemos visto java.sql pero no javax.sql Utiliza el tipo DataSource para cargar el driver más configurable Uso del pool de conexiones para múltiples m accesos a la misma base de datos Usar transacciones no atómicas: Cambiar a connection.setautocommit(false); Acabar con connection.commit() si todo va bien o Con connection.rollback() si hay algún n problema Problemas de concurrencia Scrollable ResulSets,, sentencias batch,, etc., etc.