Download Sin título de diapositiva

Document related concepts
no text concepts found
Transcript
TEMA 8. Acceso a bases de
datos
 Arquitectura de una aplicación que accede
a una BD
 Establecer la conexión con BD
 Sentencias SQL sobre la BD
1
Bibliografía
Jesús Bobadilla, Adela Sancho. Comunicaciones y
bases de datos con Java. Ed. Rama.
George Reese. Programación de bases de datos con
JDBC y Java. Ed. Anaya Multimedia, O’Reilly.
http://www.ctv.es/USERS/pagullo/arti/jdbc1/jdb
c1.htm
Sun. “Documentación de Java”.
http://java.sun.com . Traducciones al
castellano en http://www.programacion.com
2
1 . Arquitectura de una aplicación que accede a una BD

Una aplicación Java que realiza accesos a la
base de datos funciona según una
arquitectura que permite escribir los
programas abstrayéndose de los detalles de
niveles inferiores.
Aplicación
JDBC/Controlador
Oracle/ Acess/MySQL...
3
1 . Arquitectura de una aplicación que accede a una BD
Controladores


Un controlador JDBC (es una API) es
el conjunto de clases
que
implementan
los
métodos
para
acceder a una base de datos a través
de un sistema de gestión.
Existen
cuatro
categorías
de
controladores:
4
1 . Arquitectura de una aplicación que accede a una BD
Controladores


Utilizan una tecnología puente para acceder
a la base de datos. Por ejemplo del puente
JDBC-ODBC que acompaña al jdk
(sun.jdbc.odbc.JdbcOdbcDriver).
Controladores que son API’s nativas en C o
C++ proporcionados por los distribuidores
de las bases de datos.
5
1 . Arquitectura de una aplicación que accede a una BD
Controladores

En la dirección
http://java.sun.com/products/jdbc/ind
ustry.html, se encuentra una lista de
todas las empresas que distribuyen
drivers jdbc para diferentes motores
de base de datos.
6
1 . Arquitectura de una aplicación que accede a una BD
Clases e interfaces de jdbc
Clase/Interface
Descripción
Driver
Permite conectarse a una Base de Datos: cada gestor de Base de Datos requiere un Driver distinto.
DriverManager
Permite gestionar todos los Drivers instalados en el sistema.
DriverPropertyInfo
Proporciona diversa información acerca de un Driver.
Connection
Representa una conexión con una Base de Datos. Una aplicación puede tener más de una conexión a
más de una Base de Datos.
DatabaseMetadata
Proporciona información acerca de una Base de Datos, como las tablas que contiene, etc.
Statement
Permite ejecutar sentencias SQL sin parámetros.
PreparedStatement
Permite ejecutar sentencias SQL con parámetros de entrada.
CallableStatement
Permite ejecutar sentencias SQL con parámetros de entrada y salida, típicamente procedimientos
almacenados.
ResultSet
Contiene las filas o registros obtenidos al ejecutar un SELECT.
ResultSetMetadata
Permite obtener información sobre un ResultSet, como el número de columnas, sus nombres, etc.
7
2 . Establecer la conexión con la BD
Pasos para la conexión
1.
Cargar el controlador de la BD
2.
Establecer una conexión entre el programa Java y
el sistema de administración de la Base de datos.
3.
Enviar una sentencia SQL a la BD mediante un
objeto Statement
4.
Recuperar los resultados de la BD y utilizarlos en
el programa.
8
2 . Establecer la conexión con la BD
Cargar el controlador.



JDBC está diseñado para trabajar con
diferentes sistemas de administración de
BD (de varios fabricantes)
Para poder establecer una conexión con la
BD especificada se tiene que instalar y
cargar el controlador de dicha BD.
La instalación dependerá del vendedor del
driver.
9
2 . Establecer la conexión con la BD
Cargar el controlador.


La clase DriverManager es la
responsable de cargar y descargar
esos controladores
Los drivers de JDBC suelen estar
diseñados por el fabricante de la BD;
aceptan conexiones y sentencias SQL
por un lado y realizan llamadas a la
BD por otro.
10
2 . Establecer la conexión con la BD
Cargar el controlador.

Desde la línea de órdenes, se puede cargar el driver en la
fase de ejecución mediante la siguiente sentencia:
java -Djdbc.drivers=jdbc:odbc:JdbcOdbcDriver nombrePrograma

Desde el programa, se carga el driver en tiempo de
compilación:
Class.forName(“sun.jdbc.odbc. JdbcOdbcDriver”)
No obstante algunas máquinas virtuales no llaman al
iniciador estático hasta que se crea una instancia de la
clase. Por lo tanto se debe de llamar a newInstance():
Class.forName(“sun.jdbc.odbc. JdbcOdbcDriver”).newInstance();

11
2 . Establecer la conexión con la BD
Establecimiento de la conexión

Solicitud al DriverManager para realizar una Connection:
Connection con =
DriverManager.getConnection(url_BD);
Connection con =
DriverManager.getConnection(url_BD, usuario,
palabraClave);


Cuando DriverManager recibe una petición getConnection le
envía la URL de JDBC a cada driver registrado. El primer
driver que reconoce la URL es el que estable la conexión.
Si la petición no reconoce se genera una:
SQLException
12
2 . Establecer la conexión con la BD
Sentencia SQL sobre la BD

Los objetos Statement se usan para almacenar
sentencias SQL
Statement stat=con.createStatement();


A través del objeto Statement se pueden realizar
consultas sobre la BD a través de una
Connection,
la BD ejecuta la consulta y la devuelve en un
ResultSet:
ResultSet theResults = stat.executeQuery(“consul”);
13
2 . Establecer la conexión con la BD
Obtención de resultados



La clase ResultSet funciona como un cursor SQL que
permite examinar los datos de la sentencia SQL fila a fila.
Para avanzar de una fila a la siguiente se llama a
next():esta función devuelve un valor booleano; false indica
que no existen más filas en el ResultSet.
Se puede leer el contenido de las columnas de una fila de
izquierda a derecha con los métodos getTipo().
while (theResults.next())
{String titulo=theResults.getString(“titulo”);
float precio=theResults.getFloat(“precio”);
}
14
2 . Establecer la conexión con la BD
Obtención de resultados


Dado un registro de la consulta
establecida sus campos se recuperan
con getTipoCampo( posición o
nombre).
Por lo tanto se deben conocer los
tipos correspondientes de Java a
cada tipo SQL, la tabla siguiente
representa dicha correspondencia:
15
2 . Establecer la conexión con la BD
Obtención de resultados
Tipo SQL
Tipo Java
CHAR
String
VARCHAR
String
LONGVARCHAR
String
NUMERIC
Java.math.BigDecimal
DECIMAL
Java.math.BigDecimal
BIT
Boolean
TINYINT
Byte
SMALLINT
Short
INTEGER
Int
BIGINT
Long
REAL
Float
FLOAT
Double
DOUBLE
Double
BINARY
Byte[]
VARBINARY
Byte[]
LONGVARBINARY
Byte[]
DATE
Java.sql.Date
TIME
Java.sql.Time
TIMESTAMP
Java.sql.Timestamp
16