Está en la página 1de 22

CONEXIN A UNA BASE DE DATOS

0

Universidad Nacional de Trujillo

FACULTAD DE INGENIERA

Trabajo Grupal:
CONEXIN DESDE UNA APLICACIN DE JAVA A UNA
BASE DE DATOS
INTEGRANTES:
ARIAS TANDAYPAN JORGE
HARO GUTIERREZ JUAN
MORALES CASTILLO KAROLAYN
PORTALATINO OBESO DAIVE
VARGAS OTINIANO ALVARO
CURSO:
TECNOLOGA DE LA PROGRAMACIN II
PROFESOR:
VIDAL MELGAREJO ZORAIDA



2014




CONEXIN A UNA BASE DE DATOS
1

Contenido
I. INTRODUCCIN .................................................................................................................... 2
II. BASE DE DATOS..................................................................................................................... 3
1. DEFINICIN .............................................................................................................. 3
2. CARACTERSTICAS ..................................................................................................... 3
3. COMPONENTES ........................................................................................................ 4
4. ESTRUCTURA ............................................................................................................ 4
III. ODBC (Open Data Base Connectivity) .............................................................................. 6
IV. JDBC (Java Data Base Connectivity) ................................................................................. 6
1. CONTROLADORES ..................................................................................................... 7
A. TIPO 1 ................................................................................................................... 7
B. TIPO 2 ................................................................................................................... 9
C. TIPO 3 ................................................................................................................... 9
D. TIPO 4 ................................................................................................................. 10
V. LENGUAJE SQL ..................................................................................................................... 12
2. IMPORTAR EL PAQUETE SQL ............................................................................... 12
VI. ACCESO DE JDBC A BASES DE DATOS .............................................................................. 13
1. Instalar el Driver ..................................................................................................... 13
2. Establecer la conexin con la base de datos............................................................. 13
3. Realizar una consulta .............................................................................................. 15
4. Leer los resultados .................................................................................................. 15
5. Obtener datos de un conjunto de resultados ........................................................... 16
6. Cerrar la conexin .................................................................................................. 17
PRUEBA DE CONEXIN ................................................................................................................ 17
EJEMPLO PRCTICO ..................................................................................................................... 18
BIBLIOGRAFA ............................................................................................................................. 21











CONEXIN A UNA BASE DE DATOS
2





I. INTRODUCCIN
Una de las principales aplicaciones de cualquier lenguaje moderno es la posibilidad de utilizar
datos pertenecientes a un sistema de base de datos. La dificultad del manejo de archivos y las
facilidades de manejo de datos que ofrecen los sistemas gestores de base de datos (SGBD) son
los causantes de esta necesidad.

En el mercado hay gran cantidad de bases de datos y cada una de ellas se maneja de un modo
diferente. Esto est en contra del planteamiento fundamental de Java que intenta que la
programacin sea independiente de la plataforma.

Hoy en da hay que tener en cuenta que la inmensa mayora de los SGBD administran bases de
datos relacionales. stas son bases de datos que permiten organizar los datos en tablas que
despus se relacionan mediante campos clave y que trabajan con el lenguaje estndar
conocido como SQL.

Cada tabla es una serie de filas y columnas, en la que cada fila es un registro y cada columna
un campo. Cada campo representa un dato de los elementos almacenados en la tabla
(nombre, DNI,...). Cada registro representa un elemento de la tabla (la seora Eva Jimnez, el
seor Andrs Gutirrez,...). No puede aparecer dos veces el mismo registro, por lo que uno o
ms campos forman lo que se conoce como clave principal.
La clave principal no se puede repetir en dos registros y permite que los datos se relacionen.

La idea de Sun era desarrollar una sola API para el acceso a bases de datos, esta interfaz se
conoce como JDBC. Los requisitos eran:
JDBC sera una API a nivel SQL (el lenguaje SQL sera el que realizara la conexin con las
bases de datos), independiente por tanto de la plataforma.
JDBC deba ser similar al funcionamiento de las API para acceso a bases de datos
existentes (en especial a la ya entonces famosa ODBC de Microsoft)
JDBC deba ser sencilla de manejar.
A continuacin explicaremos como es que se acceden desde Java a base de datos relacionales
a travs del JDBC. En primera instancia revisaremos algunos aspectos generales a tener en
cuenta para un mejor entendimiento de lo que se pretende.








CONEXIN A UNA BASE DE DATOS
3

II. BASE DE DATOS

1. DEFINICIN

Es comn relacionar base datos con software y tecnologa pero realmente base de
datos no es ninguno de estos dos trminos, no se necesita de estos trminos para
tener una base de datos; una BD por ejemplo es un directorio telefnico que es
comn tener en casa, en la cual nosotros podemos encontrar toda una relacin de
personas ordenadas por apellido y sus respectivos nmeros telefnicos como
tambin su direccin.
El problema surge cuando contamos con demasiados datos los cuales sern difciles
de procesar, tomar tiempo y dinero. Es por ello que hoy en da las bases de datos se
guardan en computadoras, los mismos que procesan inmediatamente todo los datos
y nos darn informacin para tomar decisiones en nuestra empresa.
Una base de datos es un almacn que nos permite guardar grandes cantidades de
informacin de forma organizada para que luego podamos encontrar y utilizar
fcilmente.
Desde el punto de vista informtico, la base de datos es un sistema formado por un
conjunto de datos almacenados en discos que permiten el acceso directo a ellos y un
conjunto de programas que manipulen ese conjunto de datos.
Cada base de datos se compone de una o ms tablas que guarda un conjunto de
datos. Cada tabla tiene una o ms columnas y filas. Cada fila es un registro y cada
columna un campo. Cada campo representa un dato de los elementos almacenados
en la tabla (nombre, DNI, edad, etc.). Cada registro representa un elemento de la
tabla (la seora Eva Jimnez, el seor Andrs Gutirrez,)

2. CARACTERSTICAS

Independencia de los Datos. Es decir, que los datos no dependen del programa y
por tanto cualquier aplicacin puede hacer uso de los datos.
Reduccin de la Redundancia. Llamamos redundancia a la existencia de
duplicacin de los datos, al reducir sta al mximo conseguimos un mayor
aprovechamiento del espacio y adems evitamos que existan inconsistencias
entre los datos.
Seguridad. Un SBD debe permitir que tengamos un control sobre la seguridad de
los datos.
Distribucin espacial de los datos. La independencia lgica y fsica facilita la
posibilidad de sistemas de bases de datos distribuidas. Los datos pueden
encontrarse en otra habitacin, otro edificio e incluso otro pas. El usuario no
tiene por qu preocuparse de la localizacin espacial de los datos a los que
accede.
Respaldo y recuperacin: se refiere a la capacidad de un sistema de base de
datos de recuperar su estado en un momento previo a la prdida de datos.
Manejo de mltiples vistas de los datos. Cada usuario visualiza lo que le interesa
en la base de datos, pudiendo acceder a subconjuntos de datos. Por ejemplo en
CONEXIN A UNA BASE DE DATOS
4

la BD de un tienda comercial, al departamento de Compras posiblemente le
interese visualizar la tabla Productos y en ocasiones las de Facturas (para
chequear bajas en el stock), pero no la que contiene los datos de los Clientes.
Acceso a travs de lenguajes de programacin estndar. Se refiere a la
posibilidad ya mencionada de acceder a los datos de una base de datos
mediante lenguajes de programacin ajenos al sistema de base de datos
propiamente dicho.

3. COMPONENTES

Datos. Los cuales estn almacenados de acuerdo a la estructura externa y van a
ser procesados para convertirse en informacin.
Hardware. Se refiere a los dispositivos de almacenamiento en donde reside la
base de datos (discos, tambores, cintas).
Software. Est constituido por un conjunto de programas que se conoce como
Sistema Manejador de Base de Datos. Este sistema maneja todas las solicitudes
formuladas por los usuarios a la base de datos.
Usuarios. Existen tres clases de usuarios relacionados con una Base de Datos:
Programador de aplicaciones, quien crea programas de aplicacin que
utiliza la base de datos.
Usuario final, quien accede la Base de Datos por medio de un lenguaje de
consulta o de programas de aplicacin.
Administrador de la base de datos, quien se encarga del control general del
Sistema de Base de Datos.
4. ESTRUCTURA

Una base de datos, a fin de ordenar la informacin de manera lgica, posee un orden
que debe ser cumplido para acceder a la informacin de manera coherente. Cada
base de datos contiene una o ms tablas, que cumplen la funcin de contener los
campos.
En el siguiente ejemplo mostramos una tabla comentarios que contiene 4 campos.

Los datos quedaran organizados como mostramos en siguiente ejemplo:



CONEXIN A UNA BASE DE DATOS
5

Tablas: son estructuras encargadas de alojar la informacin de la base de
datos.
Campos: son cada una de las columnas de una tabla, cada campo almacena
un dato en concreto.
Registros: cada una de las filas de la tabla que agrupa toda la informacin de
un mismo elemento.
Relaciones: son los vnculos establecidos entre las diferentes tablas que
permiten trabajar con los datos de todas ellas, como si estuvieran en una
sola.
Consulta: mediante el uso de consulta se puede extraer informacin concreta
aunque la misma provenga de varias tablas.
Claves: es un campo cuyo contenido no puede estar duplicado en la misma
tabla y permite identificar a cada registro de manera univoca.
Clave nica. Cada tabla puede tener uno o ms campos cuya
informacin es nica en cada tabla, es decir, no pueden existir dos o
ms registros diferentes cuyos valores en dichos campos sean
idnticos. Este conjunto de campos se llama clave nica. Pueden existir
varias claves nicas en una determinada tabla, y a cada una de stas
suele llamrsele candidata a clave primaria.
Clave primaria. Una clave primaria es una clave nica elegida entre
todas las candidatas que define unvocamente a todos los dems
atributos de la tabla, para especificar los datos que sern relacionados
con las dems tablas. La forma de hacer esto es por medio de claves
forneas.
Clave fornea. Una clave fornea es una referencia a una clave en otra
tabla, determina la relacin existente en dos tablas. Las claves forneas
no necesitan ser claves nicas en la tabla donde estn y s a donde
estn referenciadas. Por ejemplo, el cdigo de departamento puede
ser una clave fornea en la tabla de empleados. Se permite que haya
varios empleados en un mismo departamento, pero habr uno y slo
un departamento por cada clave distinta de departamento en la tabla
de empleados.
Clave ndice. Las claves ndices surgen con la necesidad de tener un
acceso ms rpido a los datos. Los ndices pueden ser creados con
cualquier combinacin de campos de una tabla. Las consultas que
filtran registros por medio de estos campos, pueden encontrar los
registros de forma no secuencial usando la clave ndice
Formularios: son ventanas que permiten trabajar de manera cmoda sobre
el contenido de varias tareas simultneamente.
Informes: de la base de datos se adquiere la informacin y se imprime, o a
travs de un pantallazo.
Restricciones: las restricciones proveen un mtodo de implementar reglas en
la base de datos. son restricciones en general limitan la estructura de la
informacin almacenada en la base de datos, suministrando por tanto
CONEXIN A UNA BASE DE DATOS
6

informacin sobre las caractersticas que respetan los datos guardados. Las
restricciones pueden ser determinadas por los usuarios o pueden estar
definidas dentro de la misma base de datos. Algunas otras restricciones las
puede definir el usuario, por ejemplo, usar un campo con valores enteros
entre 1 y 10.
Dominios: es un conjunto de posibles valores para cierto atributo. Como un
dominio restringe los valores del atributo, puede ser considerado como una
restriccin. matemticamente, atribuir un dominio a un atributo significa
"todos los valores de este atributo deben ser elementos del conjunto
especificado". Algunos ejemplos de dominios son: enteros y cadenas de
texto, fecha, etc.

III. ODBC (Open Data Base Connectivity)

Se trata del interfaz diseado por Microsoft como estndar para el manejo de datos de
diversas bases de datos.
Esta API de bases de datos se ha convertido en la ms popular. Su xito se basa en la
facilidad de instalacin y configuracin en Windows y en que casi todos los gestores de
bases de datos la utilizan. Pero tiene varios inconvenientes:
No es transportable a todos los sistemas.
Est creada en C, con los problemas que supone eso para la programacin en
otros lenguajes (punteros void por ejemplo). Esto, en definitiva, supone que si no
se utiliza C se han de disear libreras intermedias de acceso a ODBC; con lo que
se multiplican las capas dificultando la programacin.
Es compleja su programacin.
No obstante, debido a la popularidad de ODBC, existen puentes ODBC para JDBC que
permiten comunicar bases de datos con controladores ODBC con aplicaciones
programadas para JDBC.

IV. JDBC (Java Data Base Connectivity)

Es una aplicacin de Java, que contiene un conjunto de objetos y mtodos que permiten
crear una interfaz para realizar la comunicacin con una base de datos por medio de
aplicaciones y/o applets creados en Java.
JDBC permite que programas escritos en el lenguaje de programacin Java ejecuten
instrucciones en el lenguaje estndar de acceso a bases de datos SQL (Structured Query
Language, Lenguaje estructurado de consultas). Dado que casi todos los sistemas de
administracin de bases de datos relacionales (DBMS) soportan SQL, y que los programas
realizados en Java se ejecutan en la mayora de las plataformas; JDBC hace posible escribir
una sola aplicacin que permita la interaccin con una base de datos que se pueda
ejecutar en diferentes plataformas e interactuar con distintos DBMS. En otras palabras,
con el API JDBC no es necesario escribir un programa para accesar a Access, otro
programa para accesar a Oracle, y otro para accesar a MySQL; con esta API, se puede
CONEXIN A UNA BASE DE DATOS
7

crear un solo programa que sea capaz de enviar sentencias SQL a la base de datos
apropiada.
Con la ayuda de JDBC, la habilidad de Java para integrarse con DBMS comerciales y su
naturaleza orientada al manejo de la Red, es posible crear un ambiente ideal tipo cliente-
servidor.
De una manera muy simple, al usar JDBC se pueden hacer tres cosas:
Establecer la conexin a una base de datos, ya sea remota o no.
Enviar sentencias SQL a esa base de datos.
Procesar los resultados obtenidos de la base de datos.
En el diagrama siguiente se puede apreciar como la idea es que las aplicaciones slo se
tengan que comunicar con el interfaz JDBC. sta es la encargada de comunicarse con los
sistemas de base de datos.



Esto hace que la programacin de aplicaciones de acceso a bases de datos no necesite
conocer el funcionamiento del SGBD en particular, lo que hay que conocer es el
funcionamiento de JDBC. Por supuesto, es necesario adquirir un controlador JDBC para el
sistema gestor de base de datos que utilicemos. La comunicacin fundamental entre las
aplicaciones y JDBC se realiza a travs de instrucciones SQL.

1. CONTROLADORES
Una vez instalado, configurado y puesto en funcionamiento nuestro sistema gestor de
base de datos favorito, si queremos que las bases de datos creadas por l sean
accesibles desde los programas Java, necesitamos el controlador JDBC de ese sistema.
Hay cuatro tipos de controladores:

A. TIPO 1

El driver JDBC tipo 1, tambin conocido como el puente JDBC-ODBC, es un driver
de implementacin de base de datos que utiliza el controlador ODBC para
CONEXIN A UNA BASE DE DATOS
8

conectarse a la base de datos. EL driver convierte las llamadas del mtodo JDBC
en llamadas a funciones ODBC.
El driver depende de la plataforma, ya que hace siempre hace uso de la ODBC que
a su vez depende de libreras nativas del sistema operativo subyacente de la JVM
en las que se ejecuta. Adems, el uso de este driver depende tambin de otras
instalaciones, por ejemplo, ODBC debe estar instalado en la computadora que
contenga el driver y la base de datos debe ser compatible con un controlador
ODBC. El uso de este controlador no se recomienda si la alternativa de un
controlador puro de Java est disponible. Otra de las cosas que implica el uso de
este driver es que cualquier aplicacin que utilice un controlador de tipo 1 no
deben ser portables, dada la unin entre el driver y la plataforma. Esta tecnologa
no es adecuada para un entorno de alta transaccin. Los drivers de Tipo 1 no son
compatibles con el conjunto completo de comandos Java y estn limitados por la
funcionalidad del controlador ODBC.



a) VENTAJAS

Fcil de conectar.
Conectado directamente a la base de datos.

b) DESVENTAJAS

Sobrecarga en el rendimiento ya que las llamadas tienen que pasar por
el puente JDBC para el controlador ODBC, luego a la interfaz de
conectividad nativa de la base de datos.
El controlador ODBC debe estar instalado en la mquina cliente.
En comparacin con el resto de tipos de drivers es lento.
El controlador integrado de Sun tiene un problema conocido con las
codificaciones de caracteres bases de datos Microsoft Access. Microsoft
Access puede utilizar una codificacin que no se reduce correctamente
por el driver, lo que lleva a la sustitucin de las cadenas, por ejemplo,
caracteres acentuados por signos de interrogacin. Una solucin en
lugar de evitar las cadenas de lectura directa, sera ms bien leer los
bytes sin formato y luego traducirlos en una cadena, que especifica la
codificacin de la fuente correcta.


CONEXIN A UNA BASE DE DATOS
9

B. TIPO 2

Son controladores parcialmente escritos en Java y parcialmente escritos en el
cdigo nativo que comunica con el API de la base de datos. En estos controladores
hay que instalar tanto paquetes Java como paquetes de cdigo nativo, lo que no
les hace vlidos para Internet.


a) VENTAJAS

Ofrecen una mejor performance que el JDBC- ODBC Bridge cuyas capas
de comunicacin son menores de ese tipo.
Tambin usa Native API que es una base de datos especifica.

b) DESVENTAJAS

Native API debe ser instalado en el sistema del cliente y por lo tanto el
driver del tipo 2 no puede ser usado para internet.
As como el driver del tipo 1, este no est escrito en el lenguaje Java
cuyas formas son ediciones portables.
Si cambiamos la base datos, tendremos que cambiar el Native API como
una base de datos especifica.
Mayormente obsoleta en estos tiempos.
Usualmente tratamiento inseguro.

C. TIPO 3

Son paquetes puros de Java que usan protocolos independientes de la base de
datos. Es decir las instrucciones JDBC son pasadas a un servidor genrico de base
de datos que utiliza un protocolo determinado. No requiere tener instalado
ningn software de librera de la base de datos. Lo malo es que el servidor
intermedio (middleware) suele requerir instrucciones especficas de la base de
datos.
El mismo driver puede ser utilizado para mltiples bases de datos. Depende del
nmero de bases de datos que ha sido el middleware configurado para soportar.

CONEXIN A UNA BASE DE DATOS
10


a) VENTAJAS

Dado que la comunicacin entre el cliente y el servidor de base de datos
de middleware es independiente, no hay necesidad de que la biblioteca
de base de proveedores se encuentre en la mquina cliente. Tambin el
cliente middleware no es necesario que sea cambiado a una nueva base
de datos.
El servidor de middleware (que puede ser un completo servidor de
aplicaciones J2EE hecho y derecho) puede proporcionar los servicios
tpicos de middleware, como el almacenamiento en cach (conexiones,
resultados de la consulta, y as sucesivamente), balanceo de carga,
registro, auditora, etc.
Puede ser utilizado en Internet ya que no hay software de cliente
necesario.
En el lado del cliente un solo conductor puede manejar cualquier base
de datos (Funciona siempre que el middleware compatible con la base
de datos)

b) DESVENTAJAS

Requiere de bases de datos especficas de codificacin que se realiza en
el nivel medio.
Aade una capa adicional puede resultar en un tiempo de cuello de
botella. Sin embargo, esto suele ser superado por la prestacin de
servicios eficiente middleware.

D. TIPO 4

Driver basado en tecnologa Java totalmente con protocolo nativo. El driver JDBC
tipo 4 es un driver de implementacin para base de datos que convierte las
llamadas JDBC a un protocolo de red utilizado por el DBMS directamente. Esto
permite una llamada directa de la mquina cliente al servidor DBMS y es una
solucin prctica para el acceso a Intranet. Debido a que los vendedores de bases
CONEXIN A UNA BASE DE DATOS
11

de datos son proveedores de estos protocolos, ellos mismos son la principal
fuente de este estilo de driver por lo que todava est en desarrollo.
Los drivers tipo 4 son todos los drivers de Java, esto significa que no se requiere
de instalacin o configuracin de cliente. Sin embargo, el driver tipo 4 puede no
ser conveniente para algunas aplicaciones si el protocolo subyacente no maneja
bien problemas como de seguridad y conexin de red.
Este tipo de driver comunica directamente con el servidor de bases de datos
utilizando el protocolo nativo del servidor. Estos drivers pueden escribirse
totalmente en Java, son independientes de la plataforma y eliminan todos los
aspectos relacionados con la configuracin en el cliente. Sin embargo, este driver
es especfico de un fabricante determinado de base de datos. Cuando la base de
datos necesita ser cambiada a un producto de otro fabricante, no se puede utilizar
el mismo driver. Por el contrario, hay que reemplazarlo y tambin el programa
cliente, o su asignacin, para ser capaces de utilizar una cadena de conexin
distinta para iniciar el driver.
Estos drivers traducen JDBC directamente a protocolo nativo sin utilizar ODBC o la
API nativa, por lo que pueden proporcionar un alto rendimiento de acceso a bases
de datos.



A. VENTAJAS
Como los drivers JDBC de tipo 4 no tienen que traducir las solicitudes de
ODBC o de una interfaz de conectividad nativa, o pasar la solicitud a otro
servidor, el rendimiento es bastante bueno. Adems, el driver protocolo
nativo/todo Java da lugar a un mejor rendimiento que los de tipo 1 y 2.
La JVM puede gestionar todos los aspectos de la aplicacin de base de
datos de conexin, lo que puede facilitar la depuracin.
Proporciona una forma de gestionar las copias de la base de datos para
cada usuario.
No hay necesidad de instalar ningn software especial en el cliente o en
el servidor. Adems, estos drivers pueden bajarse de la forma habitual.

B. DESVENTAJAS
Los drivers dependen de la base de datos.
En el lado del cliente, un driver especfico es necesario para cada base
de datos.
CONEXIN A UNA BASE DE DATOS
12

Con los drivers de tipo 4, el usuario necesita un driver distinto para cada
base de datos.

Normalmente las distribuciones JDBC que suministran los fabricantes son de tipo
3 o 4 para adquirir estos controladores es necesario ponerse en contacto con el
fabricante o dirigirse a su pgina web y despus descargarlo. Las instrucciones de
instalacin las da el fabricante, pero en caso de ser controladores de tipo 3 o 4
habr que instalar los paquetes del API JDBC en la ruta Classpath para que sean
accesibles por los compiladores Java.
Para saber si existe controlador JDBC para nuestra base de datos de trabajo, se
puede comprobar en la direccin:




V. LENGUAJE SQL

El lenguaje SQL es el ms universal en los sistemas de base de datos. Este lenguaje nos
permite realizar consultas a nuestras bases de datos para mostrar, insertar, actualizar y
borrar datos.
A continuacin veremos un ejemplo de ellos:
Mostrar: para mostrar los registros se utiliza la instruccin Select. Select * From
comentarios.
Insertar: los registros pueden ser introducidos a partir de sentencias que emplean la
instruccin Insert. Insert Into comentarios (ttulo, texto, fecha) Values ('saludos', 'como
esta', '22-10-2007')
Borrar: Para borrar un registro se utiliza la instruccin Delete. En este caso debemos
especificar cual o cuales son los registros que queremos borrar. Es por ello necesario
establecer una seleccin que se llevara a cabo mediante la clusula Where. Delete From
comentarios Where id='1'.
Actualizar: para actualizar los registros se utiliza la instruccin Update. Como para el caso
de Delete, necesitamos especificar por medio de Where cules son los registros en los que
queremos hacer efectivas nuestras modificaciones. Adems, tendremos que especificar
cules son los nuevos valores de los campos que deseamos actualizar. Update
comentarios Set ttulo='Mi Primer Comentario' Where id='1'.

2. IMPORTAR EL PAQUETE SQL
Este paquete contiene las diferentes clases para la manipulacin de la base de
datos como son:
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 informacin acerca de un Driver.
http://servlet.java.sun.com/products/jdbc/drivers/index.html
CONEXIN A UNA BASE DE DATOS
13

Connection: Representa una conexin con una Base de Datos. Una aplicacin
puede tener ms de una conexin a ms de una Base de Datos.
DatabaseMetadata: Proporciona informacin acerca de una Base de Datos, como
las tablas que contiene, etc.
Statement: Permite ejecutar sentencias SQL sin parmetros.
PreparedStatement: Permite ejecutar sentencias SQL con parmetros de
entrada.
CallableStatement: Permite ejecutar sentencias SQL con parmetros de
entrada y salida, tpicamente procedimientos almacenados.
ResultSet: Contiene las filas o registros obtenidos al ejecutar un SELECT.
ResultSetMetadata: Permite obtener informacin sobre un ResultSet, como el
nmero de columnas, sus nombres, etc.
VI. ACCESO DE JDBC A BASES DE DATOS
1. Instalar el Driver
En nuestro programa java, todos los import que necesitamos para manejar la base de
datos estn en java.sql.*. Puesto que casi todos los mtodos relativos a base de datos
pueden lanzar la excepcin SQLException, meteremos todo nuestro programa en
un try-catch.
Adems, necesitamos la clase org.gjt.mm.mysql.Driver que viene con el driver
de MySQL. Por ello, en nuestro CLASSPATH o incluido en nuestro proyecto con
nuestro IDE favorito, debemos incluir el jar que contiene el driver MySQL (mysql-
connector-java-3.1.7-bin.jar) o la versin ms moderna y compatible con la versin de
nuestro servidor de MySQL.
Lo primero que tenemos que hacer es asegurarnos que el Driver se inicializa y se
registra, para ello




2. Establecer la conexin con la base de datos
Debemos tener el servidor de MySQL arrancado. Si hemos instalado y dejado esa
opcin como estaba, cada vez que encendamos el ordenador, se arrancar el servidor
deMySQL, por lo que no tenemos que preocuparnos por ello.
El servidor de MySQL abre por defecto el puerto 3306 para aceptar conexiones de
posibles clientes, de programas que quieran conectarse y acceder a la base de datos.
Try { Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
}

CONEXIN A UNA BASE DE DATOS
14

Nuestro programa java, si quiere consultar la tabla de base de datos que hemos
creado, deber conectarse a este servidor.
Para establecer la conexin, la clase DriverManager tiene mtodos getConnection().
Usaremos uno de ellos:




El primer parmetro del mtodo getConnection() es un String que contiene la url de la
base de datos:
jdb:mysql porque estamos utilizando un driver jdbc para MySQL, que es el que
nos hemos bajado.
localhost porque el servidor de base de datos, en mi caso, est en el mismo
ordenador en el que voy a correr el programa java. Aqu puede ponerse una IP
o un nombre de mquina que est en la red.
prueba es el nombre de la base de datos que he creado dentro de mysql. Se
debe poner la base de datos dentro del servidor de MySQL a la que se quiere
uno conectar. Es el nombre que pusimos cuando desde SQL hicimos create
database prueba.
Los otros dos parmetros son dos String. Corresponden al nombre de usuario y
password para acceder a la base de datos. Al instalar MySQL se crea el usuario root y
se pide la password para l. Como no hemos creado otros usuarios, usaremos este
mismo.
Si todo va bien, en conexin tendremos nuestra conexin a la base de datos.
Esta conexin es en realidad un socket entre java y la base de datos, aunque para
nosotros es transparente. Lo que s es importante, es saber que si varios hilos
comparten esta conexin, deben usarla sincronizada mente. Si no se hace as, los
mensajes que van por el socket se pueden entremezclar y los hilos pueden leer cachos
de mensaje destinados al otro hilo. Otra opcin es que cada hilo cree su propia
conexin. Finalmente, la mejor opcin de todas si nuestra aplicacin va a tener varios
hilos intentando acceder a la base de datos, es usar un Pool de conexiones.
// Establecemos la conexin con la base de datos.
Connection conexion =
DriverManager.getConnection
("jdbc:mysql://localhost/prueba","root", "la_clave");

CONEXIN A UNA BASE DE DATOS
15

3. Realizar una consulta
Para realizar cualquier accin sobre la base de datos (consulta, insertar nuevos
registros, modificar los existentes o borrar), necesitamos una clase Statement. Para
obtenerla, se le pide dicha clase a la conexin. La forma de hacerlo, para una consulta,
es la siguiente:




La parte de createStatement() no tiene ning secreto, salvo que puede lanzar una
excepcin que hay que capturar.
El Statement obtenido tiene un mtodo executeQuery(). Este mtodo sirve para
realizar una consulta a base de datos.
El parmetro que se pasa en un String en el que est la consulta en lenguaje
SQL. No hace falta terminarlo con punto y coma. En nuestro caso "select *
from persona". siendo persona el nombre que hemos puesto a la tabla en la
base de datos.
El resultado nos lo devuelve el mtodo como un ResultSet. Este ResultSet no
es ms que una clase java similar a una lista en la que est el resultado de la
consulta. Cada elemento de la lista es uno de los registros de la base de datos.
En realidad, ResulSet no contiene todos los datos, sino que los va consiguiendo
de la base de datos segn se van pidiendo. Por ello, el
mtodo executeQuery() puede tardar poco, pero el recorrer los elementos
del ResultSet no es tan rpido. De esta forma se evita que una consulta que d
muchos resultados tarde mucho tiempo y llene la memoria del programa java.
4. Leer los resultados
El ResultSet contiene dentro los registros leidos de la base de datos. Inicialmente, tal
cual nos lo devuelve el Statement.executeQuery(), tiene internamente un "puntero"
apuntando justo delante del primer registro. El mtodo next() del ResultSet hace que
dicho puntero avance al siguiente registro, en este caso, al primero. Si lo consigue, el
mtodo next() devuelve true. Si no lo consigue (no hay siguiente registro que leer),
devuelve false.

// Preparamos la consulta
Statement s = conexion.createStatement();
ResultSet rs = s.executeQuery ("select * from persona")
CONEXIN A UNA BASE DE DATOS
16

Por tanto, una forma de ir leyendo los registros en meternos en un while.




Una vez que el "puntero" est apuntando a un registro, los
mtodos getInt(), getString(), getDate(), etc nos van devolviendo los valores de los
campos de dicho registro. Podemos pasar a estos mtodos un ndice (que comienza en
1) para indicar qu columna de la tabla de base de datos deseamos. Tambin podemos
usar un String con el nombre de la columna (tal cual est en la tabla de base de datos).
Es responsabilidad nuestro saber qu tipo de dato hay en cada columna, aunque si nos
equivocamos y RecordSet es capaz de hacer la conversin, la har por nosotros. Por
ejemplo, en cualquiera de los campos anteriores podemos pedir un getString() y nos
devolvern los nmeros como String y la fecha como String.
Tambin podemos usar getObject(), y el RecordSet nos devolver el Object ms
adecuado para el tipo de campo que pedimos.
5. Obtener datos de un conjunto de resultados

Los resultados de una consulta son recogidos en un objeto ResultSet. Un objeto de
este tipo contiene un numero variable de fila y columnas.Esta tabla utiliza un cursor
para indicar la fila que realizara determinada operacin .Inicialmente,este cursor esta
situado antes de la primera fila.Para mover ese cursor la interfaz ResultSet proporciona
varios metdos entre ellos:
beforeFirst(): Mover el cursor antes de la primera fila.
first(): Mover el cursor a la primera fila.
last(): Mover el cursor a la ultima fila.
afterLast(): Mover el cursor despus de la ultima fila.
previous(): Mover el cursor a la fila anterior.
next(): Mover el cursor a la fila siguiente.
absolute(fila): Mover el cursor a la fila especificada.
relative(n):Mover el cursor n filas a partir de la actual (n puede ser un valor
positivo o negativo)
Todos estos mtodos devuelven un valor true o false para indicar si el movimiento fue
o no posible.
Para obtener los datos de la fila donde est el cursor, la interfaz ResultSet tambin
proporciona varios mtodos; algunos de ellos son:
// Recorremos el resultado, mientras haya registros para leer, y
//escribimos el resultado en pantalla.
while (rs.next())
{ System.out.println (rs.getInt (1) + " " + rs.getString (2)+ " " + rs.getDate(3));
}

CONEXIN A UNA BASE DE DATOS
17

getString(String):Recupera la columna especificada por String
getString(int):Recupera la columna indicada por el ndice especificado
6. Cerrar la conexin
Una vez que terminamos de usar la conexin, se debera cerrar, o bien terminar el
programa, con lo que se cierra automticamente.


PRUEBA DE CONEXIN

/*
* PruebaMySQL.java
*
* Programa de prueba para conexin a una base de datos de MySQL.
* Presupone que el servidor de base de datos est arrancado, disponible,en el puerto por
defecto.
* El usuario y password de conexin con la base de datos debe cambiarse.
* En la base de datos se supone que hay una base de datos llamada prueba y que
* tiene una tabla persona con tres campos, de esta manera:
* mysql> create database prueba;
* mysql> use prueba;
* mysql> create table persona (id smallint auto_increment, nombre varchar(60),
* nacimiento date, primary key(id));
*/

package chuidiang.ejemplos.base_datos;

import java.sql.*;
/**
* Clase de prueba de conexin con una base de datos MySQL
*/
public class PruebaMySQL {
/**
* Crea una instancia de la clase MySQL y realiza todo el cdigo
* de conexin, consulta y muestra de resultados.
*/
public PruebaMySQL()
{
// Se mete todo en un try por los posibles errores de MySQL
try
{
// Se registra el Driver de MySQL
DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
// Se obtiene una conexin con la base de datos. Hay que
// cambiar el usuario "root" y la clave "la_clave" por las
// Cerramos la conexin a la base de datos.
conexion.close();

CONEXIN A UNA BASE DE DATOS
18

// adecuadas a la base de datos que estemos usando.
Connection conexion = DriverManager.getConnection (
"jdbc:mysql://localhost/prueba","root", "la_clave");

// Se crea un Statement, para realizar la consulta
Statement s = conexion.createStatement();

// Se realiza la consulta. Los resultados se guardan en el
// ResultSet rs
ResultSet rs = s.executeQuery ("select * from persona");
// Se recorre el ResultSet, mostrando por pantalla los resultados.
while (rs.next())
{
System.out.println (rs.getInt ("Id") + " " + rs.getString (2)+
" " + rs.getDate(3));
}

// Se cierra la conexin con la base de datos.
conexion.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* Mtodo principal, instancia una clase PruebaMySQL
*
*/
public static void main(String[] args)
{
new PruebaMySQL();
}
}
EJEMPLO PRCTICO

Para este ejemplo crearemos una base de datos la cual llamaremos javamysql con una nica
tabla llamada persona, corre el siguiente Script en MySQL
-- MySQL Administrator dump 1.4
-- Server version 5.1.37-1ubuntu5
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,
FOREIGN_KEY_CHECKS=0 */;
CONEXIN A UNA BASE DE DATOS
19

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'
*/;
-- Create schema javamysql
CREATE DATABASE IF NOT EXISTS javamysql;
USE javamysql;
CREATE TABLE `javamysql`.`persona` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(20) NOT NULL,
`sexo` char(1) NOT NULL DEFAULT 'M',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
INSERT INTO `javamysql`.`persona` VALUES (1,'Herman','M'),
(2,'Ana','F'),
(3,'Carlos','M'),
(4,'Marta','F'),
(5,'Jos','M'),
(6,'Allan','M'),
(7,'Sonia','F');
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

Ahora, crearemos un proyecto de Java, en la clase Main copia el siguiente cdigo fuente:
package javamysql;
import java.sql.*;
public class Main {

private static Connection conexion;
private static String bd="javamysql";
private static String user="test";
private static String password="123";
private static String host="localhost";
private static String server="jdbc:mysql://"+host+"/"+bd;

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//conectar
try {
Class.forName("com.mysql.jdbc.Driver");
conexion = DriverManager.getConnection(server,user,password);
System.out.println("Conexin a base de datos "+server+" ... OK");
} catch (ClassNotFoundException ex) {
System.out.println("Error cargando el Driver MySQL JDBC ... FAIL");
} catch (SQLException ex) {
System.out.println("Imposible realizar conexion con"+server+" FAIL");
CONEXIN A UNA BASE DE DATOS
20

}

//realizar consulta
try {
// Preparamos la consulta
Statement s = conexion.createStatement();
ResultSet rs = s.executeQuery ("select * from persona");
// Recorremos el resultado, mientras haya registros para leer, y escribimos el resultado
en pantalla.
while (rs.next())
{
System.out.println(
"ID: " +rs.getInt (1) +
"\tNombre: " + rs.getString (2)+
"\tSexo: " + rs.getString("sexo")
);
}
} catch (SQLException ex) {
System.out.println("Imposible realizar consulta ... FAIL");
//Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}

//desconectar
try {
conexion.close();
System.out.println("Cerrar conexion con "+server+" ... OK");
} catch (SQLException ex) {
System.out.println("Imposible cerrar conexion ... FAIL");
//Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

Al ejecutar el programa deberamos de obtener como resultado algo como:
Conexin a base de datos jdbc:mysql://localhost/javamysql ... OK
ID: 1 Nombre: Herman Sexo: M
ID: 2 Nombre: Ana Sexo: F
ID: 3 Nombre: Carlos Sexo: M
ID: 4 Nombre: Marta Sexo: F
ID: 5 Nombre: Jos Sexo: M
ID: 6 Nombre: Allan Sexo: M
ID: 7 Nombre: Sonia Sexo: F
Cerrar conexion con jdbc:mysql://localhost/javamysql ... OK




CONEXIN A UNA BASE DE DATOS
21

BIBLIOGRAFA

Ejemplos java y C/linux. (4 de febrero de 2007). Recuperado el 20 de mayo de 2014, de
http://www.chuidiang.com/java/mysql/EjemploJava.php
Cdigo Fantasma. (4 de febrero de 2010). Recuperado el 22 de mayo de 2014, de
http://www.codigofantasma.com/blog/conectar-java-con-mysql-usando-jdbc/
Ceballos Sierra, F. J. (s.f.). Java 2 Interfaces graficas y aplicaciones para Internet (2 ed.). Alfa
Omega.
Eckel, B. (s.f.). Pensando en Java (4 ed.). Pearson.
Oracle. (s.f.). Oracle Documentation. Recuperado el 19 de mayo de 2014, de
http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html