SESION 01 - LP I
-
Upload
ricardo-coello-palomino -
Category
Documents
-
view
8 -
download
1
description
Transcript of SESION 01 - LP I
-
Lenguaje de Programacin I
PROFESOR: Ricardo Coello Palomino 1 Semana Pg. 1
PRIMERA UNIDAD DIDCTICA
TECNOLOGA JDBC APLICADO A LA INTERFASE SWING
I INTRODUCCION Y ORIENTACION PARA EL ESTUDIO
Amigo participante:
Acabas de emprender el estudio que te permitir conocer y aplicar la tecnologa JDBC con la finalidad de
construir aplicaciones Java con conexin a base de datos, con posibilidad de realizar mantenimiento y
manejo de los datos.
Se le invita a tomar los valiosos conocimientos de esta separata siguiendo detalladamente la metodologa
planteada: Lea analticamente el contenido de esta unidad, aplique los ejercicios propuestos, y finalmente
realice las actividades propuestas, si tuviera dudas sobre algn aspecto, no dude en consultar con su
profesor de la asignatura.
Cada tema cuenta con el objetivo que se desea lograr, su respectivo resumen, desarrollo y las actividades
domiciliarias que debe desarrollarse para fortalecer el conocimiento, su glosario de trminos que pudiera
desconocer y algunos anexos para ampliar su conocimiento.
II DESARROLLO DE LOS CONTENIDOS
TEMA1: INTRODUCCION A LA TECNOLOGIA JDBC
LOGROS
El participante lograr comprender el funcionamiento y la importancia de la tecnologa JDBC y de
sus diversos componentes, as como tambin sus interacciones de esta tecnologa con los diferentes
orgenes de datos.
El participante aprenda a manejar las distintas interfaces y clases contenidas en el JDBC de Java con el
propsito de establecer una conexin, ejecutar comandos SQL y manejar un esquema de datos.
RESUMEN
La tecnologa JDBC es un conjunto de clases e interfaces, escritos en cdigo 100% Java que permiten la
conexin y el manejo de los datos de una base de datos. La tecnologa JDBC utiliza un Driver provisto por
el fabricante que permite la conexin entre la aplicacin y la base de datos.
JDBC contiene una variedad amplia de clases e interfaces para el manejo de datos, entre las que resalta por
su importancia las siguientes: Connection (permite abrir, controlar y cerrar la conexin con una base de
datos), Statement (permite ejecutar los comandos SQL para insertar, modificar, borrar y crear esquemas de
datos), ResultSet (Maneja un esquema de datos), DriverManager (Maneja los drivers de conexin).
-
Lenguaje de Programacin I
PROFESOR: Ricardo Coello Palomino 1 Semana Pg. 2
DESARROLLO
INTRODUCCIN
Java Database Connectivity (JDBC) es una interface de acceso a bases de datos estndar SQL que
proporciona un acceso uniforme a una gran variedad de bases de datos relacionales. JDBC tambin
proporciona una base comn para la construccin de herramientas y utilidades de alto nivel.
El paquete actual de JDK incluye JDBC y el puente JDBC-ODBC. Estos paquetes son para su uso
con JDK 1.x.
DEFINICION DEL JDBC
JDBC es el API para la ejecucin de sentencias SQL. (Como punto de inters JDBC es una marca registrada
y no un acrnimo, no obstante a menudo es conocido como Java Database Connectivity). Consiste en un
conjunto de clases e interfaces escritas en el lenguaje de programacin Java. JDBC suministra un API
estndar para los desarrolladores y hace posible escribir aplicaciones de base de datos usando un API puro
Java.
Usando JDBC es fcil enviar sentencias SQL virtualmente a cualquier sistema de base de datos. En otras
palabras, con el API JDBC, no es necesario escribir un programa que acceda a una base de datos Sybase,
otro para acceder a Oracle y otro para acceder a Informix. Un nico programa escrito usando el API JDBC y
el programa ser capaz de enviar sentencias SQL a la base de datos apropiada. Y, con una aplicacin escrita
en el lenguaje de programacin Java, tampoco es necesario escribir diferentes aplicaciones para ejecutar en
diferentes plataformas. La combinacin de Java y JDBC permite al programador escribir una sola vez y
ejecutarlo en cualquier entorno.
Java, siendo robusto, seguro, fcil de usar, fcil de entender, y descargable automticamente desde la red,
es un lenguaje base excelente para aplicaciones de base de datos.
FUNCIONES DEL JDBC
1. Establecer una conexin con una base de datos
2. Enviar una consulta SQL a la base de datos
3. Procesar los resultados de la consulta.
El API JDBC del desarrollador de aplicaciones consta de dos partes, por un lado est el paquete java.sql,
que contiene las clases e interfaces que permiten acceder a la funcionalidad bsica del API JDBC. Este
paquete forma parte de la edicin estndar de la plataforma Java (J2SE), desde la versin 1.1 de sta. Esta
separata se centra en la funcionalidad de este paquete.
CARACTERSTICAS Y DRIVERS DEL JDBC
Los Driver, tambin llamados Manejadores, son un conjunto de clases que implementan las clases e
interfaces del API JDBC necesarias para que una aplicacin Java pueda conectarse con una BD. Cuando
los desarrolladores de una BD desean que esta pueda ser accesible mediante JDBC stos deben
implementar un manejador para esa base de datos; la misin del manejador ser traducir comandos estndar
del API JDBC al protocolo nativo de esa base de datos.
-
Lenguaje de Programacin I
PROFESOR: Ricardo Coello Palomino 1 Semana Pg. 3
Cada base de datos emplea un protocolo diferente de comunicacin, protocolos que normalmente son
propietarios. El uso de un manejador, una capa intermedia entre el cdigo del desarrollador y la base de
datos, permite independizar el cdigo Java que accede a la BD del sistema de BD concreto a la que estamos
accediendo, ya que en nuestro cdigo Java emplearemos comandos estndar, y estos comandos sern
traducidos por el manejador a comandos propietarios de cada sistema de BD concreto.
Si queremos cambiar el sistema de BD que empleamos lo nico que deberemos hacer es reemplazar el
antiguo manejador por el nuevo, y seremos capaces de conectarnos la nueva BD.
Para garantizar que un manejador respeta el API JDBC existe un conjunto de pruebas que debe pasar el
manejador para poderse considerar JDBC CompliantTM, estas pruebas (disponibles en
http://java.sun.com/products/jdbc/download.html) nos garantizan que un manejador ha sido desarrollado
siguiendo el API JDBC.
En http://servlet.java.sun.com/products/jdbc/drivers se puede encontrar manejadores para cualquier base de
datos.
Tipos de manejadores:
Hay 4 tipos de manejadores JDBC, que difieren en s, usan o no tecnologa Java Pura, en su rendimiento y
en la flexibilidad para cambiar de base de datos. Veamos cuales son:
a. Puente JDBC-ODBC (tipo1)
ODBC es un API estndar semejante a JDBC, que permite que lenguajes como C++ accedan de un modo
estndar a distintos sistemas de BD. Un manejador tipo puente JDBC-ODBC delega todo el trabajo sobre un
manejador ODBC, que es quien realmente se comunica con la BD. El puente JDBC-ODBC permite la
conexin desde Java a BD que no proveen manejadores JDBC. Fue muy til cuando se cre el API JDBC,
ya que muchas BD no disponan de manejadores JDBC, pero s de manejadores ODBC. Empleado el puente
JDBC-ODBC poda accederse a estas bases de datos empleando el API JDBC.
Este tipo de manejador tiene dos desventajas: por un lado depende de cdigo nativo, ya que el manejador
ODBC no ha sido desarrollado en Java. Esto compromete la portabilidad de nuestro desarrollo. Por otro lado
al emplear este tipo de manejador nuestra aplicacin llama al gestor de manejadores JDBC, quien a su vez
llama al manejador JDBC (puente JDBC-ODBC), quien llama al manejador ODBC, que es el que finalmente
llama a la base de datos. Hay muchos puntos donde potencialmente puede producirse un fallo, lo cual hace
que estos manejadores muchas veces sean bastante inestables.
-
Lenguaje de Programacin I
PROFESOR: Ricardo Coello Palomino 1 Semana Pg. 4
El puente forma parte del jdk de SUN, est en el paquete sun.jdbc.odbc. Inicialmente este tipo de manejador
fue bastante til por aliviar la carencia de manejadores JDBC.
Hoy en da es el menos recomendado por limitar la portabilidad de la aplicacin, al requerir cdigo nativo, y
por emplear tantas capas para la comunicacin con la base de datos, lo que a veces hace que incrementa
la inestabilidad de estos manejadores.
b. Manejador de API nativo (tipo2)
Se basa en una librera escrita en cdigo nativo para acceder a la base de datos. El manejador traduce las
llamadas JDBC a llamadas al cdigo de la librera nativa, siendo el cdigo nativo el que se comunica con las
bases de datos. La librera nativa es proporcionada por los desarrolladores de la BD.
Estos manejadores son ms eficientes y tienen menos puntos de fallo que el puente JDBC-ODBC ya que
hay menos capas entre el cdigo de la aplicacin y la base de datos. Sin embargo siguen teniendo el
problema de prdida de portabilidad por emplear cdigo nativo.
c. Manejador de JDBC-Net (tipo3)
El manejador se comunica con un servidor intermedio que se encuentra entre el cliente y la base de datos.
El servidor intermediario se encarga de traducir las al API JDBC al protocolo especfico de la base de datos.
No se requiere ningn tipo de cdigo nativo en el cliente, por lo que la portabilidad de la aplicacin est
garantizada: el manejador es tecnologa 100% Java.. Adems si el intermediario es capaz de traducir las
llamadas JDBC a protocolos especficos de diferentes sistemas de BD podremos emplear un mismo
manejador para comunicarnos con diferentes bases de datos. Esto lo convierte en el manejador ms flexible
de todos. No obstante se trata de un driver complejo, ya que requiere la presencia de un midelware, una
capa intermedia entre el cliente y la base de datos, por lo que no es muy comn emplearlo en arquitecturas
simples, sino ms bien en arquitecturas sofisticadas donde muchas veces entran en juego varias bases de
datos distintas. API JDBC
-
Lenguaje de Programacin I
PROFESOR: Ricardo Coello Palomino 1 Semana Pg. 5
d. Manejador de Protocolo Nativo (tipo4)
El manejador traduce directamente las llamadas al API JDBC al protocolo nativo de la base de datos. Es el manejador
que tiene mejor rendimiento, pero est ms ligado a la base de datos que empleemos que el manejador tipo JDBC-Net,
donde el uso del servidor intermedio nos da una gran flexibilidad a la hora de cambiar de base de datos. Este tipo de
manejadores tambin emplea tecnologa 100% Java.
-
Lenguaje de Programacin I
PROFESOR: Ricardo Coello Palomino 1 Semana Pg. 6
LAS INTERFACES Y CLASES DEL JDBC
JDBC incluye un conjunto de interfaces y clases de que permiten el manejo de base de datos en Java, esta
tecnologa est basada fundamentalmente en las siguientes interfaces:
a. Driver
b. DriverManager
c. Connection
d. Statement
e. PreparedStatement
f. CallableStatement
g. ResultSet
REGISTRO DE UN MANEJADOR
Registrar un manejador no es ms que cargar en memoria una clase que implementa el interfaz Driver, clase
proporcionada por los desarrolladores de la base de datos. Existen tres formas de registrar un Driver:
1. Empleando el cargador de clases. Para ello empleamos, al igual que para cargar cualquier otra clase, el
mtodo forName(String clase) de la clase Class.
Class.forName("com.mysql.Driver");
2. Instanciando la clase que implementa el interfaz Driver. De este modo tendremos una referencia al Driver,
pudiendo establecer la conexin directamente con l sin necesidad de emplear la clase DriverManager.
La sintaxis es la misma que para instanciar cualquier otra clase:
Driver driverPraMySQL = new org.gjt.mm.mysql.Driver();
3. Definir la propiedad jdbc.drivers. Podemos hacerlo de dos modos diferentes:
a. Definiendo la propiedad jdbc.drivers en nuestra mquina virtual. La sintaxis es
jdbc.drivers=nombreManejador1: nombreManejador2:
jdbc.drivers=gjt.mm.mysql.Driver:oracle.jdbc.driver.OracleDriver;
b. Emplear la opcin D al invocar a la mquina virtual. Para ellos debemos arrancar nuestra aplicacin
con el comando java: -
Djdbc.drivers= nombreManejador1: nombreManejador2:
java -Djdbc.drivers=gjt.mm.mysql.Driver:oracle.jdbc.driver.OracleDriver;
-
Lenguaje de Programacin I
PROFESOR: Ricardo Coello Palomino 1 Semana Pg. 7
INTERFAZ DRIVER
Aunque es vital para establecer la conexin con la base de datos en la prctica el desarrollador de
aplicaciones puede olvidarse de esta interfaz. Es responsabilidad del desarrollador del manejador proveer
una clase que la implemente esta interfaz, y ser responsabilidad del DriverManager llamar al mtodo
connect de los drivers registrados para intentar establecer la conexin con la base de datos.
No obstante es posible crear un objeto tipo Driver, instanciando la clase desarrollada por el desarrollador del
manejador, e invocar directamente a su mtodo connect, obteniendo una conexin con la base de datos sin
necesidad de emplear la clase DriverManager. De este modo tenemos ms control sobre el Driver que
estamos empleando en la conexin, cuando hemos registrado ms de un driver, ya que no nos arriesgamos
a que se establezca conexin con la BD con un driver distinto al que nosotros deseamos usar.
CLASE DRIVERMANAGER
Como su nombre indica, esta clase es la gestora de los diversos drivers (manejadores) que existan en nuestra
aplicacin. Es posible que sea necesario que en una misma aplicacin se tenga varios manejadores para
acceder a varias bases de datos.
Los mtodos que ms nos interesan de esta clase son:
static Connection getConnection(String url);
static Connection getConnection(String url, String user, String password).
Estos mtodos intentan establecer conexin con la base de datos que le indiquemos en el campo url,
empleando para ellos todos los manejadores que hemos registrado. La diferencia entre un mtodo y el otro,
obviamente, es que en uno slo se especifica la base de datos a la que nos queremos conectar, mientras
que en el otro se indica tambin el nombre de usuario de la base de datos y su password. Ms adelante
explicaremos que es el objeto Connection que devuelven estos mtodos.
Lo que hace la clase DriverManager para intentar establecer conexin con la base de datos es invocar al
mtodo connect de la interface Driver, interface que como veremos deben implementar todos los
manejadores. Realiza esta operacin con todos los manejadores que tiene registrados, si el manejador
devuelve null significa que no se ha podido conectar con la base de datos, y el gestor intenta de nuevo
conectarse con otro manejador. Si consigue conectarse con un manejador no sigue intentndolo con el resto
de los manejadores registrados, y si no consigue establecer la conexin con ningn manejador lanza una
excepcin tipo SQLException.
-
Lenguaje de Programacin I
PROFESOR: Ricardo Coello Palomino 1 Semana Pg. 8
Sintaxis de los URL de JDBC
Los URL (Uniform Resource Locator) de JDBC identifican una base de datos, y un protocolo de conexin a
esta, de un modo unvoco. Toda URL de JDBC consta siempre de tres partes:
protocolo:subprotocolo:subnombre.
Ejemplo:
"jdbc:odbc:usuarios"
Veamos cada una de las partes del URL:
1. Protocolo de la conexin. Siempre es jdbc.
2. Subprotocolo de la conexin. Identifica el tipo de mecanismo de conexin que emplearemos para acceder
a la base de datos. Es imprescindible especificarlo para que el DriverManager pueda saber qu tipo de
manejador debe emplear para crear la conexin. En el URL ejemplo el subprotocolo empleado para la
conexin a la base de datos ser ODBC, por lo que el DriverManager intentar establecer la conexin con
todos los manejadores registrados que sean de tipo 1, puente JDBC-ODBC.
3. Subnombre, identifica la base de datos con la que queremos establecer una conexin. El subnombre es
usuarios; ser el sistema ODBC quien proporcione, a partir de ese nombre, el resto de la informacin
necesaria para establecer la conexin con la base de datos.
-
Lenguaje de Programacin I
PROFESOR: Ricardo Coello Palomino 1 Semana Pg. 9
Sin embargo si empleamos otro protocolo puede ser necesario incluir la direccin de red del servidor como
subnombre. Por ejemplo:
protocolo:subprotocolo://servidor:puerto/subnombre
"jdbc:microsoft:sqlserver://localhost:1433;pubsSQL;selectMethod=cursor
As por ejemplo la URL: jdbc:bdnet://javahispano.org:4040/usuarios empleara el protocolo jdbc y un
manejador de tipo JDBC-Net para conectarse a la hipottica base de datos usuarios a travs del puerto
4040 de la mquina javahispano.org.
Mtodos de la Clase DriverManager
Todos los mtodos que encontramos en esta clase son estticos (No requieren instancia para poder utilizarlo)
y se comentan brevemente a continuacin:
Mtodo Descripcin
Connection getConnection(String url) Establece una conexin con la base de
datos identificada por la URL de JDBC que
se pasa por parmetros.
Connection getConnection(String url, Properties
info)
Establece una conexin con la base de
datos identificada por la URL de JDBC que
se pasa por parmetros.
Connection getConnection(String url, String
usuario, String contrasea)
Establece una conexin con la base de
datos pero en su segundo parmetro
especifica propiedades que posee el driver,
como puede ser la base de datos, el usuario,
la contrasea, etc. Estas propiedades se
organizan en pares propiedad/valor.
void println(String mensaje) Escribe un mensaje en el flujo de actividad
actual
void setLoginTimeout(int segundos) Establece el tiempo de espera que el driver
utilizar para realizar una conexin.
INTERFAZ CONNECTION
Representa una conexin con la base de datos. Permite crear objetos que representan consultas que se
ejecutarn en la base de datos, y permite acceder a informacin sobre la base de datos y las posibilidades
del manejador JDBC.
En esta tabla recogemos los principales mtodos de la interfaz Connection. Sobre muchos de ellos
volveremos a hablar ms adelante.
-
Lenguaje de Programacin I
PROFESOR: Ricardo Coello Palomino 1 Semana Pg. 10
Mtodos de la Interfaz Connection
Mtodo Descripcin
void close() Cierra una conexin, liberando todos los
recursos asociados a la misma.
boolean isClosed() Devuelve verdadero si la conexin est cerrada
boolean isReadOnly() Devuelve true si la conexin es de slo lectura
PreparedStatement
prepareStatement(String sql)
Crea un objeto PreparedStatement que va a
permitir enviar y ejecutar sentencias SQL
parametrizadas a la base de datos
correspondiente.
PreparedStatement
prepareStatement(String sql, int
tipoResultSet, int tipoConcurrencia)
Igual que el mtodo anterior, pero permite
especificar las caractersticas del ResultSet que
se obtendr a la hora de ejecutar el objeto
PreparedStatement correspondiente.
void setReadOnly(boolean soloLectura) Establece si una conexin posee el modo de solo
lectura o no, dependiendo del argumento de tipo
booleano.
void commit()
Hace permanentes los cambios que se realizaron
desde el ltimo commit o rollback.
Statement createStatement() Crea un objeto de tipo Statement.
bolean getAutoCommit() Indica si est en modo auto-commit.
DatabaseMetaData getMetaData()
Devuelve un objeto tipo DatabaseMetaData
con meta informacin acerca de la base de datos
contra la cual se ha abierto esta conexin..
CallableStatement prepareCall(String sql)
Crea un objeto CallableStatement para
ejecutar procedimientos almacenados SQL en la BD.
PreparedStatement prepareStatement(String sql)
Crea un objeto PreparedStatement para
ejecutar consultas SQL parametrizadas en la BD.
void rollback()
Deshace todos los cambios realizados desde la ltima
vez que se ejecut commit o rollback
void close() Cierra una conexin, liberando todos los
recursos asociados a la misma.
Statement createStatement(int
tipoResultSet, int tipoConcurrencia)
Crea tambin una sentencia SQL pero generar
en su ejecucin un objeto ResultSet con unas
caractersticas determinadas.
boolean isClosed() Devuelve verdadero si la conexin est cerrada
boolean isReadOnly() Devuelve true si la conexin es de slo lectura
PreparedStatement
prepareStatement(String sql)
Crea un objeto PreparedStatement que va a
permitir enviar y ejecutar sentencias SQL
parametrizadas a la base de datos
correspondiente.
PreparedStatement
prepareStatement(String sql, int
tipoResultSet, int tipoConcurrencia)
Igual que el mtodo anterior, pero permite
especificar las caractersticas del ResultSet que
se obtendr a la hora de ejecutar el objeto
PreparedStatement correspondiente.
void setReadOnly(boolean soloLectura) Establece si una conexin posee el modo de
solo lectura o no, dependiendo del argumento
de tipo booleano.
-
Lenguaje de Programacin I
PROFESOR: Ricardo Coello Palomino 1 Semana Pg. 11