Sei sulla pagina 1di 10

Programación en Java

Parte 4: Acceso a bases de datos


Objetivo General
Introducir al estudiante en el ambiente de la programación con bases de
datos utilizando Java como herramienta cliente, dando a conocer las
distintas operaciones que con ellas se pueden realizar..

Introducción
El acceso a las bases de datos es para muchos desarrolladores, una parte esencial de las
herramientas de desarrollo de software. Para los programadores novatos en Java es fundamental
comprender como las aplicaciones en Java pueden ser conectadas a una base de datos. En este
documento se mostrará como aprender a utilizar la interfaz JDBC, la cual es la herramienta que
permite que Java dialogue con las bases de datos. JDBC fue diseñado para hacer simple la
operación de las bases de datos. Sólo basta conocer las instrucciones SQL para realizar consultas
y actualizaciones a las bases de datos.

TEMA 1 Bases de datos relacionales


Actualmente, todos los sistemas de gestión de bases de datos modernos almacenan y tratan la
información utilizando el modelo relacional. El nombre relacional procede del hecho de que cada
registro de la base de datos contiene información relacionada con un tema y sólo con ese tema.
Además, los datos de dos clases de información (tal como candidatos y zonas de votación) pueden
ser manipulados como una única entidad basada en los valores de los datos relacionados. Por
ejemplo, sería una redundancia almacenar la información sobre el nombre de un candidato con
todos las votaciones obtenidas en cada una de las zonas. De modo que, en un sistema relacional,
la información sobre las votaciones contiene algún dato que puede ser utilizado para enlazar cada
votación con el respectivo candidato y la respectiva zona. En un Sistema de Gestión de Base de
Datos Relacionales (DBMS) el sistema trata todos los datos en tablas. Cada tabla almacena
información sobre un tema (como por ejemplo los candidatos) y dispone de unas columnas
(campos) que contienen los diferentes tipos de información sobre ese tema (como por ejemplo el
nombre del candidato) y de unas filas (registros) que describen todos los atributos de una única
instancia del tema (por ejemplo los datos del candidato “Alvaro Uribe Vélez”). Incluso cuando se
consulta la base de datos (consulta) para buscar información procedente de una o más tablas, el
resultado es siempre algo semejante a otra tabla.

La forma como la información de una tabla está relacionada con la información de otra tabla se
llamada relación. Por ejemplo, los candidatos tienen una relación uno a varios con las votaciones
ya que un candidato puede tener varias votaciones (correspondientes a las distintas zonas de
votación) y una votación corresponde a un solo candidato. Igual sucede con la relación entre zonas
de votación y las votaciones.

En resumen, el modelo de datos relacional representa una base de datos como un conjunto de
tablas y unas relaciones entre las tablas.

Para el ejemplo de este documento, se utilizará un modelo relacional para almacenar información
sobre unas elecciones:

En esta ilustración, cada rectángulo representa la estructura de una tabla con su nombre en la
parte superior y la lista de campos abajo. En negrilla aparecen los campos correspondientes la
Llave primaria, es decir, los campos que identifican cada registro en la tabla. Entre las tablas se
aprecian unas líneas correspondientes a las relaciones, las cuales representan la dependencia que
se da entre las tablas y que tienen asociada una cardinalidad:

Esta base de datos debe ser implementada en un DBMS como lo puede ser SQL Server, Oracle,
Paradox, Informix, o Access.

En nuestro caso utilizaremos el motor de base de datos Microsoft Jet (el cual corresponde al DBMS
Microsoft Access), que almacena la respectiva base de datos en archivos con extensión .mdb (el
nombre de la base de datos sería Elecciones.mdb). El aspecto que tendría en la ventana
Relaciones, sería el siguiente:

Se puede observar que es muy similar al diagrama relacional de la parte superior, lo que ilustra
cuanto se aproximan las herramientas de software hoy en día a los diseños.

En la terminología de las bases de datos, el diseño general de la base de datos se denomina


Esquema de la base de datos.

El conjunto de información guardado en una base de datos en un momento dado se denomina


Instancia en la base de datos.

Un esquema raras veces se altera, mientras la instancia se caracteriza por su inestabilidad.

En la siguiente ilustración se puede observar una instancia de la base de datos Elecciones.mdb en


la cual se pueden ver las diferentes tablas con los contenidos en un momento dato. Si se es
bastante observador, se pueden apreciar las relaciones como campos con valores traídos de otras
tablas. Por ejemplo, la tabla Votacion en el primer registro tiene el valor 1 en el campo Id Candidato
que corresponde al registro con el valor “Alvaro Uribe Velez” en el campo Candidato de la tabla
Candidato.
Basado en lo anterior, es altamente recomendable poseer los conocimientos necesarios para
diseñar y administrar bases de datos si se quiere realizar programas que accedan bases de datos.

TEMA 2 ODBC y JDBC


ODBC (Open Database Conectivity) es un estándar que permite que una aplicación sobre
Windows pueda comunicarse con diferentes sistemas manejadores de bases de datos. ODBC
simplifica el desarrollo permitiendo que las aplicaciones utilicen la sintaxis del Structured Query
Language (SQL) para interaccionar con bases de datos.

Java utiliza la interfaz JDBC (Open Database Conectivity) para comunicarse con las Bases de
Datos y tiene la misma función que el ODBC la tiene para Windows. JDBC, está compuesto por un
número determinado de clases que permiten a cualquier programa escrito en Java acceder a una
base de datos.

Java puede acceder a la base de datos mediante un driver o controlador JDBC apropiado que
pueda utilizar las clases que permiten el acceso a la base de datos.

Uno de los controladores para acceder bases de datos es el Puente JDBC-ODBC el cual tiene las
siguientes características:
1Utiliza la estandarización ODBC para su funcionamiento que es el que poseen la mayoría de
los SGBD.
2Convierte todas las llamadas de JDBC a ODBC realizando el proceso inverso para la
obtención de resultados.
3Su principal inconveniente radica en que al realizar una llamada de JDBC a ODBC, éste
último debe realizar una llamada a la librería nativa del fabricante del SGBD, disminuyendo
claramente la velocidad del controlador
4Al utilizar ODBC como puente se crea una doble capa, y a su vez creamos una aplicación
dependiente de la plataforma, ya que ODBC está definido para Windows.

Sun Microsystems incluye el controlador en el JDK para popularizar el JDBC mediante el ODBC.

La siguiente imagen ilustra el esquema de conexión:


Configurando ODBC
Antes de poder acceder a una base de datos con ODBC, se debe configurar un origen de datos
ODBC. Los orígenes de datos (Data Source Name - DSN) se definen mediante el empleo de un
Administrador de orígenes de datos ODBC el cual es una aplicación identificada mediante el icono
ODBC contenida dentro del panel de control.

Una vez dentro del administrador de fuentes de datos ODBC, se podrá configurar un nuevo origen
de datos o modificar uno previamente existente.

ODBC puede manejar tres tipos distintos de fuentes de usuario:


•Usuario (User DSN), el cual sólo está disponible para el usuario que lo haya creado y sólo puede
ejecutarse desde la máquina en la que se ha definido.
•Sistema (System DSN), las cuales están disponibles para todos los usuarios de una empresa y para
todos los servicios que estén siendo ejecutados en la máquina. Normalmente se utilizan de estas para
la mayoría de aplicaciones Internet.
•Archivo (File DSN), las cuales están disponibles para todos los usuarios de una empresa siempre y
cuando dispongan de los controladores OBDC necesarios instalados en sus propias máquinas.

Los controladores (Drivers) ODBC son intermediarios capaces de convertir la sintaxis SQL a los
formatos requeridos por cada uno de los motores de bases de datos.

Cuando se define una fuente de datos ODBC se debe suministrar cierta información clave que
permita al controlador ODBC acceder a la fuente de datos. En todos los casos, lo primero que se
debe proporcionar es el controlador.
Por ejemplo para una base de datos hecha en Microsoft Access elegimos el respectivo
controlador.

A continuación se debe proporcionar un nombre. Este nombre lo utilizan los programas para
acceder al origen de datos a través del ODBC. A este origen de datos lo llamaremos
dsnElecciones.

Dependiendo del controlador, se debe proporcionar otra información. En este caso,


seleccionaremos la base de datos Elecciones.mdb.

Una vez se haya proporcionado la información requerida, se podrá cerrar el cuadro de diálogo y, a
partir de ese momento, el origen de datos estará listo para su empleo.

Funcionamiento de JDBC
La arquitectura de JDBC está basada en un conjunto de interfaces y clases de Java que permiten
conectarse con bases de datos, crear y ejecutar sentencias SQL , recuperar y modificar datos de
una base de datos.
Todo el trabajo con el JDBC comienza con la clase DriveManager, que es la que establece las
conexiones con las fuentes de datos, mediante los drivers o controladores JDBC.

Los drivers de bases de datos JDBC se definen mediante clases que implementan la interfaz
Driver. Cada driver sabe cómo convertir peticiones SQL para una base de datos concreta. Si no
disponemos del driver adecuado, no podemos conectarlos a una base de datos, y el JDBC
depende de las implementaciones concretas de cada fabricante. Por lo tanto, lo primero que debe
llevar a cabo un programa es cargar el driver adecuado para que el código de Java pueda
comunicarse con la base de datos.

Podemos describir el funcionamiento de un programa de Java con JDBC con los siguientes pasos:

1Importar las clases necesarias


2Cargar el Driver JDBC
3Identificar el origen de datos
4Crear un objeto Connection
5Crear un objeto Statement
6Ejecutar una consulta con el objeto Statement
7Liberar el objeto ResultSet
8Liberar el objeto Statement
9Liberar el objeto Connection.

TEMA 3 Accediendo a las bases de datos

Lo primero en Java para acceder a base de datos es establecer la conexión con el DBMS que se
desea usar. Esto incluye dos pasos:

1.Cargar el driver JDBC. Este es un paso muy simple y comprende una línea de código. Por
ejemplo, para nuestro caso, se utilizará el puente JDBC-ODBC:

Class.forName(sun.jdbc.odbc.JdbcOdbcDriver)

El parámetro del método forName() es el nombre del controlador.

2.Hacer la conexión. Una vez establecido el controlador adecuado, se debe especificar la


ubicación de la base de datos. En nuestro caso, dicha ubicación fue configurada en un DSN de
ODBC. Por tanto sólo basta especificar el nombre del DSN y en caso de ser necesario, la
cuenta y clave para tener acceso a la base de datos.

Connection
cnElecciones=DriverManager.getConnection(“jdbc:odbc:dsnElecciones”)

Uso de los objetos JDBC Statements


Un objeto Statement es el correspondiente a la instrucción SQL que se envía al DBMS. Basta con
instanciar el objeto y ejecutarlo. La instancia se crea mediante el método createStatement() de la
clase Connection.

Para la ejecución se utiliza el método executeQuery() si se trata de una instrucción DML y el


método executeUpdate() si se trata de una instrucción DDL.

Es importante recordar las instrucciones SQL básicas para poder operar con el objeto Statement.

En primer lugar tenemos la instrucción de Selección la cual permite obtener campos y registros
de una o varias tablas:
Select Campos
from Tablas
Where Condiciones
Group by Campos de agrupamiento
Order by Campos

La instrucción de Inserción permite agregar un nuevo registro a una tabla:


Insert into tabla
(atributo 1, atributo 2, ..., atributo n)
values (valor 1, valor 2, ..., valor n)

La instrucción de Actualización modifica los datos de uno, varios o todos los registros de una
tabla
Update tabla
set atributo = expresion
where Condiciones

La instrucción de Eliminación elimina uno, varios o todos los registros de una tabla
Delete From tabla
where Condiciones

Suponga que se desea consultar el total de votaciones que obtuvo cada candidato.

Statement sqlElecciones = cnElecciones.createStatement(); //Definir el objeto para la


consulta
String strSQL="SELECT Candidato.Candidato , sum(Votacion.Votación) AS Total" +
" FROM Candidato, Votacion" +
" WHERE Votacion.[Id Candidato]=Candidato.[Id Candidato]" +
" GROUP BY Candidato.Candidato” +
" ORDER BY Candidato.Candidato”; //String de consulta
ResultSet rs = sqlElecciones.executeQuery(strSQL); //Ejecutar la consulta

En este caso la consulta da como resultado un objeto de la clase ResultSet.

Uso de los objetos ResultSet


Un objeto de la clase ResultSet contiene los registros que se obtienen como resultado de ejecutar
una consulta. En el ejemplo anterior se obtiene algo como lo siguiente

Para poder acceder los valores de los campos obtenidos se debe recorrer cada uno de los
registros. El método next() permite avanzar registro por registro a través del objeto ResulSet. La
primer vez que se llama el método, el cursor se ubica en el primer registro. Los siguientes llamados
permiten avanzar al siguiente registro.

Para poder obtener el valor de un campo, se tienen varios métodos dependiendo del tipo de dato
respectivo:

Método Descripción
getString() Permite obtener valores de campos de tipo VARCHAR y similares y puede convertir de otros
tipos de datos a String.
getFloat() Permite obtener valores de campos de tipo FLOAT
getInt() Permite obtener valores de campos de tipo INTEGER

Para completar nuestro ejemplo, supóngase que se desea visualizar el resultado de la consulta en
un cuadro de lista. El código sería:

/* Llenar la lista con las votaciones */


while(rs.next())
lstVotacion.addItem(rs.getString("Candidato")+": "+rs.getString("Total")+" votos");
rs.close(); //Cerrar registros
sqlElecciones.close(); //Cerrar consulta
cnElecciones.close(); //Cerrar Conexión

La apariencia de la aplicación es la siguiente:

El código completo incluyendo la definición de la ventana y el cuadro de lista sería:

import java.sql.*;
import java.awt.*;

public class Votaciones extends Frame{


public static void main(String[] args)
{
new Votaciones();
}
/* Método constructor de la aplicación */
public Votaciones()
{
/* Diseñar la ventana principal */
super("Votaciones"); //Instanciar la ventana
List lstVotacion=new List(); // Objeto para listar las votaciones
lstVotacion.removeAll();
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dsn = "jdbc:odbc:dsnElecciones"; //Define el string de conexión
/* Establece la conexión */
Connection cnElecciones = DriverManager.getConnection(dsn);
/* Define objeto de consulta */
Statement sqlElecciones = cnElecciones.createStatement();
String strSQL="SELECT Candidato.Candidato, sum(Votacion.Votacion) AS
Total" +
" FROM Candidato, Votacion" +
" WHERE Votacion.[Id Candidato]=Candidato.[Id Candidato]" +
" GROUP BY Candidato.Candidato" +
" ORDER BY Candidato.Candidato"; //String de consulta
ResultSet rs = sqlElecciones.executeQuery(strSQL); //Ejecutar la consulta
/* Llenar la lista con las votaciones */
while(rs.next())
lstVotacion.addItem(rs.getString("Candidato")+": "+
rs.getString("Total")+" votos");
rs.close(); //Cerrar registros
sqlElecciones.close(); //Cerrar consulta
cnElecciones.close(); //Cerrar Conexión
}
catch(SQLException e) {System.out.println("Error SQL:" + e);} //Captura posible error
de SQL
catch(Exception e) {System.out.println("Error:" + e);} //Captura posible error
add(lstVotacion);// Agregar el objeto para listar
this.pack(); //Ajustar la ventana
this.show();
}
}

TEMA 4 Un ejemplo de actualización de base de datos.

TEMA 5 Ejercicios de Aplicación

Con base en el siguiente modelo relacional:


1.Elabore una ventana en Java que liste los autores con sus respectivos países.
2.Elabore una ventana en Java que liste los libros con su respectiva editorial. Incluya un menú
con una opción que permita abrir otra ventana que liste los autores del libro escogido.

Potrebbero piacerti anche