Está en la página 1de 8

Diseo y Modelado de bases de datos

Practica 11: Conexin de Java con Bases de datos Access


En esta prctica vamos a crear una base de datos Microsoft Access y luego vamos a
conectarnos desde una aplicacin java haciendo uso del puente JDBC-ODBC que se
establece con las fuentes de datos y los drivers que ya vienen el el JDK de Windows y de
Java respectivamente.
Creacin de la base de datos en Access
1.
2.
3.
4.

Abra Microsoft Access


De clic sobre Archivo nuevo y seleccione Base de datos en blanco
En la ventana que aparece seleccione crear una tabla en la vista de diseo
En la ventana emergente ingrese los nombres de los cambos id_ciudad, nom_ciudad
y poblacion como lo muestra la figura 1

Figura 1.

Gabriel Vsquez Departamento de Electrnica, Instrumentacin y Control

Diseo y Modelado de bases de datos

5. Cierre la ventana y escoja guardar los cambios, en el nombre de la tabla digite


Ciudad.
6. Seleccione la opcin Tablas y luego seleccione la tabla ciudad dando doble clic.
7. Ingrese los datos que muestra la figura 2.

Hasta aqu ya se ha creado la base de datos y se han ingresado los datos en la tabla
ciudad, ahora vamos a crear una aplicacin en java que se conecte y nos permita
recuperar algunos datos.
JDBC y ODBC
La capacidad para acceder a bases de datos desde Java la ofrece la API JDBC (Java
DataBase Conectivity). JDBC es un estndar para manejar bases de datos en Java.
ODBC es un estndar de Windows para manejar bases de datos, de forma que cualquier
programa en Windows que desee acceder a bases de datos genricas debe usar este
estndar. La necesidad de crear un estndar propio para acceder a bases de datos desde
Java se explica porque el estndar ODBC est programado en C y un programa que use
este estndar, por lo tanto, depende de la plataforma.
Controladores JDBC-ODBC
Necesitamos acceder a un origren de datos ODBC pero contamos con una API que usa el
estndar JDBC. Para solventar este problema las empresas realizan drivers que traducen
el ODBC a JDBC. Hay varios tipos de Driver, pero para nuestro ejemplo usaremos los
llamados puentes JDBC-ODBC. El JDK de Windows incorpora el driver necesario para
conectar bases de datos Access.
Crear un nuevo DSN (Data Source Name)
Para realizar la conexin a una base de datos ODBC necesitaremos crear un perfil DSN
desde el panel de control y posteriormente accederemos a la base de datos a partir del
nombre del perfil. En el perfil DSN lo que se hace es indicar el driver a utilizar, as como el
archivo o archivos del origen de datos. Estos son los pasos a llevar a cabo para configurar
un perfil DSN.
1. Vaya al Panel de Control.
2. De doble clic en el icono de Herramientas Administrativas
Gabriel Vsquez Departamento de Electrnica, Instrumentacin y Control

Diseo y Modelado de bases de datos

3. De doble clic sobre el icono Origenes de Datos (ODBC)


4. En nuestra pantalla aparecer ahora la pestaa DSN usuario seleccionada. Para
crear un nuevo perfil de clic en Agregar...
5. A continuacin se nos pide que ingresemos el controlador que vamos a usar en el
nuevo perfil. En nuestro caso ser Microsoft Access Driver (*.mdb).
6. Una vez aqu slo nos queda dar un nombre al origen de datos y especificar el archivo
.mdb de origen. Tras aceptar la ventana ya tenemos creado un perfil con lo que ya
podemos comenzar a crear la aplicacin en Java.
Clases, objetos y mtodos bsicos
Lo que necesitamos para hacer nuestro programa es la API JDBC incluida en el JDK. El
paquete a utilizar y el cual debemos importar es el paquete java.sql.
1. Cree un nuevo proyecto en Eclipse y cree una clase llamada ControlBD dentro de
un paquete llamado control.
2. Importe el paquete java.sql con la lnea de cdigo
import java.sql.*;

Las primeras lneas de cdigo suelen ser rutinarias ya que siempre sern muy similares.
Cargar el Driver
Lo primero es hacer una llamada al Driver JDBC-ODBC para cargarlo.
1. Cree un mtodo llamado conectar (public void conectar(){ })y en el cuerpo del
mtodo digite el siguiente cdigo
Srtring url= "jdbc:ODBC:nombre_perfil_DSN";
String login= "";
String password= "";
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
System.out.println("No se encontro la clase del Driver");
}

Con esto ya tenemos cargado el Driver. Ahora bsicamente trabajaremos con tres
objetos. Estos objetos son: Connection, Statement y ResultSet. El objeto Connection
se obtiene al realizar la conexin a la base de datos. El objeto Statement se crea a partir
del anterior y nos permite ejecutar SQL para hacer consultas o modificaciones en la base
de datos. En caso de hacer una consulta (SELECT ... FROM ...) se nos devolver un
objeto que representa los datos que deseamos consultar; este objeto es un objeto
ResultSet (Hoja de resultados).

Gabriel Vsquez Departamento de Electrnica, Instrumentacin y Control

Diseo y Modelado de bases de datos

2. Adicione los siguientes atributos a la Clase ControlBD;


Connection conn;
Statement stat;
ResultSet rst;

El objeto Connection
Debemos realizar la conexin a nuestro origen de datos.
3. Digite las siguiente lnea debajo de la lnea donde se carga el Driver.

conn=DriverManager.getConnection(url,login,password);

Los dos ltimos parmetros pueden ser cadenas vacas a no ser que la base de datos
requiera otros valores. Con esto ya hemos realizado una conexin a nuestra base de
datos. Pero esto todava no es suficiente. Ahora vamos a crear un objeto Statement con el
que podremos ejecutar y hacer consultas SQL. Si hasta ahora todo ha sido rutinario a
partir de ahora vamos a poder crear cdigo ms adaptado a las necesidades de nuestra
aplicacin.
4. Adicione un catch para capturar la excepcin SQLException
El objeto Statement
Como se ha dicho, un objeto Statement se crea a partir del objeto Connection antes
obtenido. Tambin como se ha dicho un objeto Statement nos permite hacer consultas
SQL que nos devuelven una hoja de resultados. Pues bien, segn como deseamos que
sea esa hoja de resultados (modificable, o no, sensible a las modificaciones o no,...)
deberemos crear de una forma u otra el objeto Statement
5. Debajo de la lnea donde se crea el objeto conn adicione la siguientes lneas de cdigo
stat = conn.createStatement();
System.out.println("Conexion establecida");

De esta forma muy simple hemos creado un objeto Statement. Ahora podemos usar este
objeto Statement para hacer modificaciones en la base de datos a travs del lenguaje
SQL. Para realizar modificaciones, es decir, instrucciones INSERT, UPDATE o DELETE,
se usa el mtodo executeUpdate pasando como parmetro una cadena de texto String
que contenga la instruccin SQL.

Gabriel Vsquez Departamento de Electrnica, Instrumentacin y Control

Diseo y Modelado de bases de datos

Para hacer una consulta, es decir, una instruccin SELECT debemos usar otro mtodo: el
mtodo executeQuery que como el anterior se le ha de pasar un String que contenga la
instruccin. Este mtodo nos devuelve un objeto ResultSet que contiene los datos
obtenidos.
El objeto ResultSet: Hoja de resultados
Moverse por la hoja de resultados
Al hablar de posicin del cursor nos referimos a la posicin dentro de los datos del objeto
ResultSet. Lo primero que hay que saber es que el cursor tiene tantas posiciones como
filas tenga la consulta y dos ms que se sitan antes de la primera fila y despus de la
ltima. Cuando se crea un objeto Resultset, la posicin del cursor es la anterior a la
primera fila.
Para mover el cursor a la posicin siguiente usaremos el mtodo next() que nos devuelve
una variable booleana: true, si se ha podido mover; false, si no ha sido posible el
desplazamiento. Nos devolver false si estamos en el timo registro (el posterior al
ltimo). Para movernos hacia atrs tenemos un mtodo muy similar: el mtodo previous()
que al igual que el anterior nos devuelve un valor booleano que ser false si estamos en
el registro anterior al primero. Estos mtodos nos permiten movernos de forma relativa por
la hoja de resultados
Obtener datos de la hoja de resultados
Para acceder a los datos de la hoja de resultados usamos los mtodos get...(int
numeroColumna) o get...(String nombreColumna). Estos mtodos nos devuelven el
valor que indica el nombre del mtodo (por ejemplo tenemos: getString, getInt, getDate,
...) indicando el nmero o el nombre de la columna. Hay que tener en cuenta que el
nmero de columna es el nmero de columna en la hoja de resultados y por tanto se
establece con el orden en el que se han incluido las columnas en la instruccin SELECT.
Por ejemplo si hemos hecho la consulta de la siguiente forma: SELECT Nombre, Apellidos
... la columna Nombre ser la primera y la columna Apellidos ser la segunda
independientemente de cmo estn situadas en la base de datos. Si hacemos un
SELECT * FROM ..., en ese caso las columnas estarn en el orden en el que estn en la
base de datos.

6. Cree un mtodo llamado getCiudades de la siguiente forma:


public String[][] getCiudades(){
int numFilas;
String[][] datos;
String sql="select count(*) as numFilas from ciudad";
try {
rst=stat.executeQuery(sql);
rst.next();
numFilas=rst.getInt("numFilas");
datos=new String[numFilas][3];
String sql2="Select * from ciudad";
Gabriel Vsquez Departamento de Electrnica, Instrumentacin y Control

Diseo y Modelado de bases de datos


rst=stat.executeQuery(sql2);
int i=0;
while(rst.next()){
datos[i][0]=Integer.toString(rst.getInt(1));
datos[i][1]=rst.getString("nom_ciudad");
datos[i][2]=Integer.toString(rst.getInt(3));
i++;
}
return datos;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
Creacin de la interfaz de usuario
1.
2.

Cree una nueva clase visual de tipo JFrame dentro de un paquete llamado vista
Agregue un botn en la parte inferior del Frame como lo muestra la figura 3.

3.

En el centro del panel Adicione una JTable on ScrollPane, la GUI debe ir quedando como lo
muestra la figura 4.

4.

Adicione el evento actionPerformed al botn.

Gabriel Vsquez Departamento de Electrnica, Instrumentacin y Control

Diseo y Modelado de bases de datos

5.

Vaya al cdigo de la clase y cambie la lnea System.out.println("actionPerformed()"); por la


lnea

getCiudades(); los errores que se generan es porque no se ha implementado este mtodo.

6. Antes de implementar el mtodo importemos la clase Control.ControlBD mediante la


linea de cdigo:
import control.ControlBD; antes de la declaracin de la clase GUI_Ciudad

7. Ahora adicione el atributo de clase de tipo ControlBD con la siguiente lnea en la


seccin de atributos:
ControlBD cBD=new ControlBD();

8. Implemente el mtodo getCiudades de la siguiente forma:


private void getCiudades() {
cBD.conectar();
String[][] ciudades=cBD.getCiudades();
String[] columns=new String[]{"ID","NOMBRE","POLACION"};
jTable=null;
jTable=
new JTable(ciudades, columns);
jScrollPane.getViewport().add(jTable);
cBD.desconectar();
}

El error que se genera es porque falta implementar el mtodo desconetar en la clase


ControlBD.
9. Impelerte el mtodo desconectar en la clase ControlBD de la siguiente forma:
public void desconectar(){
try {
conn.close();
System.out.println("Conexion cerrada");
}catch (SQLException e) {
e.printStackTrace();
}
}

10. En la clase GUI_Ciudad busque el mtodo initialize y adicione la lnea de cdigo


this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

11. Cree el mtodo main en la clase GUI_Ciudad (si no est creado) y digite las siguientes
lineas de cdigo, de modo que quede de la siguiente forma:
public static void main(String[] args) {
GUI_Ciudad gCiudad=new GUI_Ciudad();
gCiudad.setVisible(true);
}

Gabriel Vsquez Departamento de Electrnica, Instrumentacin y Control

Diseo y Modelado de bases de datos

12. Ejecute la clase GUI_Ciudad y de clic sobre el botn Consultar, si las cosas salieron
bien, la interfaz debera verse como la figura.

Fin de la Prctica

Gabriel Vsquez Departamento de Electrnica, Instrumentacin y Control

También podría gustarte