Java con bd

31
Java con Bases de Datos Java con Bases de Datos

Transcript of Java con bd

Page 1: Java con bd

Java con Bases de DatosJava con Bases de Datos

Page 2: Java con bd

2

Requisitos previosRequisitos previosConocimientos de programación avanzada en JavaConocimientos de programación avanzada en JavaModelado de datosModelado de datosSQLSQL

ObjetivosObjetivosIntroducción al acceso a bases de datos desde Introducción al acceso a bases de datos desde aplicaciones con Java Data Base aplicaciones con Java Data Base Connectivity Connectivity (JDBC)(JDBC)

Dirigido aDirigido aProgramadores y Analistas/Programadores que deseen Programadores y Analistas/Programadores que deseen desarrollar aplicaciones para Internet con acceso a desarrollar aplicaciones para Internet con acceso a bases de datosbases de datos

Java con bases de datosJava con bases de datos

Page 3: Java con bd

3

IntroducciónIntroducciónEl estándar JDBCEl estándar JDBCEjemplo con JDBCEjemplo con JDBCClases de JDBCClases de JDBCAPI JDBC 2.0API JDBC 2.0

ContenidosContenidos

Page 4: Java con bd

4

IntroducciónIntroducciónTecnología de acceso a bases de datosTecnología de acceso a bases de datos

Entusiasmo inicial de la tecnología Java como plataforma cliente/servidor y computación en WebDesarrolladores de bases de datos (Oracle, Informix) pretenden que los applet accedan a sus bases de datos a través de redes con tecnología Internet

En la conferencia JavaOne (mayo 1996) Sun anuncia nuevos APIs Enterprise dirigidos a aplicaciones cliente/servidor

JDBC (Java DataBase Conectivity) para acceso a bases de datosJVM incorpora un gestor específico para cada tipo de SGBD

Se apoya en la especificación y filosofía de ODBC: JDBC⇒⇒⇒⇒ ODBC

Page 5: Java con bd

5

IntroducciónIntroducciónAcceso a bases de datos desde JavaAcceso a bases de datos desde Java

API Java EnterpriseJDBC

Métodos específicos proporcionados por los desarrolladores de cada base de datosMétodos desarrollados por terceras compañías

Page 6: Java con bd

6

El estándar JDBCEl estándar JDBC

JDBC como API EnterpriseConjunto de clases de acceso a bases de datos relacionales

Desarrollo de aplicaciones cliente/servidor dirigidas a empresa mediante objetos Java, applets y servlets

Sistemas de facturaciónReserva de billetes de aviónCatálogosMarketing

Sistemas basados en una arquitectura de tres nivelesBase de datosLógica de la aplicaciónInterfaz de usuario

Page 7: Java con bd

7

El estándar JDBCEl estándar JDBCCaracterísticasCaracterísticas

Es parte de Java 1.1Independiente de la plataformaIndependiente de la base de datosModelado en base a ODBC

Disminuye la curva de aprendizaje por su amplia utilizaciónExisten implementaciones eficaces de ODBC en casi todas las plataformas y para casi todas las bases de datos

Se basa en abstracciones comunesLa conexión: conexionEl conjunto de resultados: ResultSet

Page 8: Java con bd

8

El estándar JDBCEl estándar JDBCVentajas derivadas de JDBC:ODBC

Facilita la comunicación de la aplicación con distintos SGBD’s.

Proporciona una serie de funciones para la manipulación de datos (inserción, borrado y modificación), consultas, vistas y llamadas a procedimientos.

Presenta una arquitectura de cuatro niveles:AplicaciónAdministrador de orígenes de datos.Controlador/es ODBCOrígenes de datos

Page 9: Java con bd

9

El estándar JDBCEl estándar JDBCODBC

Open DataBase Conectivity

A P L I C A C I Ó N

A d m in is t r a d o r d e o r íg n e s d e d a t o s

C o n t r o la d o r O D B C

C o n t r o la d o r O D B C

C o n t r o la d o r O D B C

O r ig e n d e d a t o s

O r ig e n d e d a t o s

O r ig e n d e d a t o s

A R Q U I T E C T U R A O D B C

Page 10: Java con bd

10

El estándar JDBCEl estándar JDBCConfiguración JDBC:ODBC

Page 11: Java con bd

11

El estándar JDBCEl estándar JDBCConfiguración JDBC:ODBC

Page 12: Java con bd

12

El estándar JDBCEl estándar JDBCConfiguración JDBC:ODBC

Page 13: Java con bd

13

El estándar JDBCEl estándar JDBCConfiguración JDBC:ODBC

Page 14: Java con bd

14

El estándar JDBCEl estándar JDBCConfiguración JDBC:ODBC

Page 15: Java con bd

15

El estándar JDBCEl estándar JDBCConfiguración JDBC:ODBC

Page 16: Java con bd

16

El estándar JDBCEl estándar JDBCConfiguración JDBC:ODBC

Page 17: Java con bd

17

El estándar JDBCEl estándar JDBCImplementación

Paquete java.sqlLos programas deben declarar el uso de este paquete

import java.sql.*

El Gestor JDBCPara una base de datos concreta

OracleBorland

Genérico para varias bases de datos

JDBC:ODBCSe traducen las llamadas JDBC en llamadas ODBC

Page 18: Java con bd

Ejemplo de implementación de

una firma de bases de datos

Implementación de Sun del ODBC

fichero .class

API JDBC

Gestor de JDBC

PuenteJDBC a ODBC

Gestor ODBC

Sistema Operativo

fichero .class

API JDBC

Gestor de JDBC de la firma de la

base de datos

Sistema OperativoInternet/intranet

Servidor de Base de Datos

Basede

Datos

Applet / Aplicación

Máquina Virtual Java

SO huésped / Hardw are

Page 19: Java con bd

19

El estándar JDBCEl estándar JDBCEsquema de clases

Mecanismo:Establecer conexión

Crear sentencia

Ejecutar sentencia

Procesar resultados

Finalizar sentencia

Cerrar conexión

Gestor debase de datos

Conexión Conexión Conexión

Sentencia

SentenciaSentenciaInvocable

SentenciaPreparada

executeUpdate()

executeQuery()

execute() getMoreResults()

getResultSet()

Resultset

Metadatos

Datos

getConnection()

prepareCall()createStatement() prepareStatement()

Page 20: Java con bd

20

TIPO Clase JDBC

Implementaciónjava.sql.Driverjava.sql.DriverManagerjava.sql.DriverPropertyInfo

Conexión a base de datos java.sql.Connection

Sentencias SQLjava.sql.Statementjava.sql.PreparedStatementjava.sql.CallableStatement

Datos java.sql.ResulSet

Errores java.sql.SQLExceptionjava.sql.SQLWarning

El estándar JDBCEl estándar JDBCTipos de Clases

Page 21: Java con bd

21

Ejemplo con JDBCEjemplo con JDBCConsulta de datos

import java.sql.*;...... final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";final String BBDD = "jdbc:odbc:ARTICULOS";try {

Class.forName(DRIVER);Connection conexion = DriverManager.getConnection(BBDD);PreparedStatement select = conexion.prepareStatement(

”SELECT * FROM articulos ORDER BY Titulo”);ResultSet r = select.executeQuery();while (resultado.next()) {

System.out.println(resultado.getString("Titulo"));}resultado.close(); select.close(); conexion.close();

} catch (Exception e) {System.out.println("Error: " + e);

}

DriverDriver

ConexiónConexión

SQLSQL

Acceso alos camposAcceso alos campos

Page 22: Java con bd

22

Ejemplo con JDBCEjemplo con JDBCConsulta de datos con condición

import java.sql.*;final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";final String BBDD = "jdbc:odbc:ARTICULOS";try {

Class.forName(DRIVER);Connection conexion = DriverManager.getConnection(BBDD);PreparedStatement select = conexion.prepareStatement(

"SELECT * FROM articulos WHERE Titulo=?");select.setString(1,miTitulo.getText());ResultSet resultado = select.executeQuery();while (resultado.next()) {

lista.addItem(resultado.getString("Titulo"));}resultado.close(); select.close(); conexion.close();

} catch (Exception e) {System.out.println("Error: " + e);

}

Page 23: Java con bd

23

Ejemplo con JDBCEjemplo con JDBCInserción de datos

import java.sql.*;final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";final String BBDD = "jdbc:odbc:ARTICULOS";try {

Class.forName(DRIVER);Connection conexion = DriverManager.getConnection(BBDD);PreparedStatement insert = conexion.prepareStatement(

”INSERT INTO articulos VALUES (?,?,?)");insert.setString(1,miTitulo);insert.setString(2,miCodigo);insert.setString(3,miTema);int resultado = insert.executeUpdate();insert.close(); conexion.close();

} catch (Exception e) {System.out.println("Error: " + e);

}

Page 24: Java con bd

24

Clases de JDBCClases de JDBCjava.sql.DriverManager

Lleva el control de los gestores JDBC disponiblesEs posible que existan varios dentro del sistemaPor defecto, carga todos los disponibles en sql.driversEl gestor cargado debería registrarse con el método registerDriver

Sintaxis utilizada: URL’sjdbc:<subprotocolo>:<parámetros>jdbc:odbc:NOTICIAS:UID=Sistema;PWD=SistemaPW

SeguridadHay que tener presente el modelo de seguridad

final String BBDD = "jdbc:odbc:ARTICULOS";Connection conexion =

DriverManager.getConnection(BBDD);

Page 25: Java con bd

25

Clases de JDBCClases de JDBCjava.sql.Driver

Gestor de información y configuración generalSe carga durante la inicialización

medianteDriverManager.registerDriverClass.forName

Se le pedirá información a lo largo del programaResidirá en memoriaMétodos:

connectgetPropertyInfo

final String DRIVER ="sun.jdbc.odbc.JdbcOdbcDriver";

Class.forName(DRIVER);

Page 26: Java con bd

26

Clases de JDBCClases de JDBCjava.sql.Connection

Puntero a la base de datos

Proporciona el contexto de trabajo para los objetos Statement y ResultSet

Soporta propiedades de transacciónsetAutoCommitcommitrollback

Connection conexion =DriverManager.getConnection(BBDD);

Page 27: Java con bd

27

Clases de JDBCClases de JDBCjava.sql.Statement

Ejecución de una sentencia SQLexecuteQuery

Sentencias SELECTdevuelve un ResultSet

executeUpdateSentencias INSERT, DELETE, UPDATE, CREATEDevuelve un entero

executeSentencias desconocidas en tiempo de compilación o sentencias que devuelven resultados complejosDevuelve true/false

Statement select = conexion.createStatement();

ResultSet resultado =

select.executeQuery(“SELECT * FROM ACTIVIDAD”);

Page 28: Java con bd

28

Clases de JDBCClases de JDBCjava.sql.PreparedStatement

Extiende Statement para añadir sentencias precompiladas SQL

Compila la sentencia SQL la primera vezSentencias que son llamadas más de una vez en el programa

Soporta parámetros de entradasetInt, setFloat, setLong, setString

PreparedStatement select = conexion.prepareStatement(

"SELECT * FROM articulos WHERE Titulo=?");

select.setString(1,”Mi titulo”);

ResultSet resultado = select.executeQuery();

Page 29: Java con bd

29

Clases de JDBCClases de JDBCjava.sql.ResultSet

Contiene los datos resultado de una sentencia SQLSe recuperan secuencialmente en filas

next sirve para avanzar una filaSe puede acceder a los datos de las columnas en cualquier orden

índice de posiciónnombre del campoMétodos: getString, getFloat, getInt, etc.Método wasNull()

PreparedStatement select = conexion.prepareStatement("SELECT * FROM articulos WHERE Titulo=?");

select.setString(1,”Mi titulo”);

ResultSet resultado = select.executeQuery();

while (resultado.next())System.out.println(resultado.getString("Titulo"));

Page 30: Java con bd

30

Ejemplo con JDBCEjemplo con JDBCPrograma para trabajar con MySQL

import java.sql.*;final String DRIVER = "org.gjt.mm.mysql.Driver";final String BBDD = "jdbc:mysql://chico.inf-cr.uclm.es/articulos";try {

Class.forName(DRIVER);Connection conexion = DriverManager.getConnection(BBDD);Statement insert = conexion.prepareStatement(

”INSERT INTO articulos VALUES (?,?,?)");insert.setString(1,miTitulo);insert.setString(2,miCodigo);insert.setString(3,miTema);int resultado = insert.executeUpdate();insert.close(); conexion.close();

} catch (Exception e) {System.out.println("Error: " + e);

}

Page 31: Java con bd

31

API JDBC 2.0API JDBC 2.0Características

RequerimientosVersión 1.2 o superior de JDKDriver con soporte para JDBC 2.0DBMS que implemente características de JDBC 2.0

AportacionesAmpliación de la interfaz ResultSet

Movimiento a cualquier posición y direcciónRealización de modificaciones en los datos a través del ResultSet (sin SQL)Soporte para ejecución Batch de sentenciasNuevos tipos de datos correspondientes a SQL3