Está en la página 1de 24

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 1

ACCESO A BASES DE DATOS


Un programa bsicamente recibe una serie de datos, que introduce el usuario, luego realiza una serie de clculos con ellos, y finalmente presenta los resultados en pantalla. El usuario usa una serie de elementos para introducir los datos en el programa y para darle las rdenes al programa para que realice los clculos. Estos elementos son las ventanas con todos sus componentes: botones, cuadros de dilogos, etiquetas, listas desplegables, etc El programa realiza los clculos con dichos datos y los resultados los presenta en elementos de la ventana para que el usuario pueda verlos de forma cmoda. Estos elementos donde aparecen resultados pueden ser etiquetas, cuadros de mensaje, etc Hay que distinguir por tanto entre el GUI y el Proceso de Datos. El GUI (interfaz grfica de usuario) es el conjunto de elementos que permiten al usuario comunicarse con el programa. Estos elementos le permiten al usuario introducir datos, dar rdenes al programa y visualizar los resultados obtenidos. Para entendernos, el GUI es bsicamente el diseo de las ventanas del programa. Un buen diseo del GUI es vital. La interfaz de usuario debe hacer que el programa sea intuitivo, fcil de usar. Un programa incmodo, por muy bueno que sea, ser rechazado por el usuario. Aparte del GUI, internamente el programa debe realizar una serie de clculos para obtener los resultados pedidos por el usuario. No hace falta decir que la programacin de estos clculos debe ser precisa y correcta, ya que en caso contrario el programa no servira para nada, por muy buena que fuera la interfaz de usuario. Todo lo anterior se puede representar grficamente de la siguiente forma:

Datos, rdenes

Datos, rdenes

Clculos, procesos, acciones

Resultados Usuario GUI Interfaz de usuario Ventanas, botones, mens, etc

Resultados Programacin interna: Procedimientos, funciones, clases, etc

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 2

BASES DE DATOS
Ahora se va a dar una vuelta de tuerca ms a lo indicado anteriormente aadiendo a todo este entorno el concepto de Base de Datos. Hay que tener en cuenta que la mayora de las aplicaciones que solicitan las empresas son programas cuya funcin principal es la de mantener datos de la propia empresa. Estos programas suelen tener siempre las mismas funciones bsicas. Deben ser capaces de: Almacenar datos producidos por la empresa: facturas, datos de clientes, productos, gastos, ingresos, trabajadores, etc Visualizar dichos datos. Modificar / Eliminar dichos datos. Consultar dichos datos. Es decir, visualizar solo aquellos datos que cumplan una condicin. Por ejemplo: visualizar las facturas del mes de enero, o mostrar los productos que estn en stock, mostrar los trabajadores que hayan trabajado ms de 100 horas, etc Realizar clculos con los datos. Por ejemplo, calcular el total de ingresos entre dos fechas, calcular lo que hay que declarar de iva, etc

As pues, la mayor parte de las aplicaciones que encarga una empresa son aplicaciones que deben gestionar una serie de datos. Estos datos deben estar guardados en un fichero o ficheros. A este conjunto de datos que debe manipular el programa se le denomina BASE DE DATOS. Una Base de Datos no es solamente un conjunto de datos almacenados en un mismo sitio. Hay que tener en cuenta que para que estos datos sean fciles de manipular, es necesario que tengan una organizacin determinada. Una Base de Datos mal organizada se convierte simplemente en un cajn de sastre donde resulta imposible encontrar lo que se busca. As pues, es necesario tener en cuenta la forma en que se organizarn los datos dentro de la base de datos, o dicho de otra forma, el diseo de la base de datos.

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 3

Acceso a la BASE DE DATOS desde la aplicacin


Aadiendo el concepto de Base de Datos a la idea de usuario, GUI y Proceso de Datos, podemos representar grficamente un programa como sigue:

Datos, rdenes, consultas a la base de datos

Datos, rdenes, consultas a la base de datos Resultados GUI Interfaz de usuario Ventanas, botones, mens, etc

Clculos, procesos, acciones, Acceso a la base de datos

Resultados Usuario

Programacin interna: Procedimientos, funciones, clases, etc

Resultados de la consulta a la base de datos

SQ L

Consultar la base de datos. Aadir, modificar, eliminar datos.

BASE DE DATOS

Analicemos el grfico anterior: 1. El usuario le pide algo al programa. Por ejemplo el usuario quiere obtener un listado de clientes, o quiere saber cuanto se ha ingresado el ltimo mes 2. Para ello, el usuario activa los elementos del GUI necesarios. Es decir, activar la opcin del men que corresponda, o el botn de la barra de herramientas, etc. Dicho de otra manera, el usuario da una orden. 3. Es posible que el usuario tenga que introducir algn dato. Por ejemplo, si quiere saber los ingresos del mes de enero, tendr que introducir enero para que el programa sepa de que mes hay que calcular los ingresos. Para ello el usuario usar un cuadro de texto del GUI, o un desplegable, etc 4. Hay que tener en cuenta que para obtener un listado de clientes, o el total de ingresos de un mes, hay que consultar la base de datos. El usuario no se preocupar de eso ya que ser el programa el que haga el trabajo. 5. El GUI traspasa la peticin del usuario al mdulo de Proceso de Datos. Este mdulo es el corazn del programa, el que se encarga de ejecutar las rdenes. Esta parte del

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 4

programa analizar la orden y acto seguido buscar los datos necesarios en la base de datos. 6. Para acceder a la base de datos, el mdulo de Proceso de Datos usar un lenguaje ideado para el acceso a bases de datos llamado SQL. 7. Gracias al lenguaje SQL, el mdulo de Proceso de Datos obtendr los datos necesarios que peda el usuario (por ejemplo el listado de clientes) o bien los datos necesarios para realizar el clculo (los ingresos de cada da del mes) 8. Una vez obtenido los resultados, el mdulo de Proceso de Datos se los enviar al GUI y los presentar de forma agradable para el usuario. 9. El usuario mirar su pantalla, y ver aparecer en la ventana del programa (en el GUI) el resultado que haba pedido.

Teniendo en cuenta lo visto, para la creacin de un programa hay que: Disear un GUI agradable, cmodo y fcil de usar. Disear la base de datos de forma que el acceso a datos sea rpido. Hacer el programa de forma que responda a las peticiones del usuario transmitidas por el GUI accediendo a la base de datos y obteniendo informacin de ella, o bien realizando acciones en ella.

GESTOR DE BASE DE DATOS


Un gestor de base de datos es un programa que nos permite crear bases de datos, mantenerlas, realizar consultas en ellas, etc A travs de un gestor de base de datos podemos crear la base de datos que usar nuestro programa. Existen diversos programas gestores de base de datos, pero para esta prctica se usar el gestor Microsoft Access. Partiremos de que la Base de Datos ya la tenemos implementada mediante dicho gestor aplicando los conocimientos obtenidos en el mdulo de Base de Datos. Se entrega la base de datos ????????.MDB.

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 5

Acceso a Base de Datos desde una aplicacin Java


El fichero de la Base de Datos contendr toda la informacin que la empresa necesita gestionar. Este fichero se incluir con el programa java que se realice. Nuestro programa java acceder a este fichero continuamente para aadir nuevos datos, o modificar datos, eliminar datos, o extraer datos segn lo ordene el usuario del programa. En esta prctica, se vern los pasos necesarios para conectar un proyecto java con un fichero de base de datos creado en Access.

Introduccin a JDBC
JDBC (Java DataBase Connectivity) es el API (Application Programming Interface) estndar de acceso a Bases de Datos con Java, y se incluye con el JDK a partir de la versin 1.1. Sun opt por crear una nueva API, en lugar de utilizar APIs ya existentes, como ODBC (Open DataBase Conectivity, API de Microsoft para conectividad a base de datos), con la intencin de obviar los problemas que presenta el uso desde Java de estas APIs, que suelen ser de muy bajo nivel y utilizan caractersticas no soportadas directamente por Java, como punteros, etc. JDBC es una interfaz para programar la ejecucin de sentencias SQL sobre SGBDR (Sistemas Gestores de Bases de Datos relacionales). Este API facilita programar el acceso a BD sin que se tenga en cuenta a que Servidor nos dirigimos (Oracle, Informix, ...). Su funcin consiste en: - Establecer la conexin con una BD. - Enviar sentencias SQL. - Procesar los resultados. La idea que est detrs de JDBC es dar a los programadores un API que les permita codificar de manera independiente al fabricante del gestor de base de datos. JDBC tiene dos capas: por una parte el API JDBC y por otra el controlador del fabricante, este ltimo recibe las peticiones de JDBC y las traduce en servicios internos del gestor de bases de datos: El API JDBC que es el conjunto de clases que utiliza el programador. Dentro de este API tenemos el administrador de controladores (Driver Manager) que recibe las peticiones del programa Java y comunica con el controlador seleccionado, de manera transparente para el programador. El controlador recibe las rdenes y las traduce a rdenes directas al gestor de base de datos.

Para trabajar con JDBC es necesario tener controladores (drivers) que permitan acceder a las distintas Bases de Datos convirtiendo el lenguaje de alto nivel a sentencias de bases de datos. Un driver puede estar totalmente escrito en Java (Java 100%) o ser una mezcla de Java y mtodos nativos escritos en otros lenguajes como C, C++ o ensamblador.

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 6

Sun clasifica los drivers en 4 tipos: Tipo o Nivel 1: puente JDBC-ODBC ms driver ODBC, que permite acceder a la base de datos concreta a travs de ODBC. Tipo o Nivel 2: driver parcialmente escrito en Java y parcialmente nativo que hace llamadas al driver nativo del SGBRD. Tipo o Nivel 3: driver en Java a protocolo de red independiente del SGBRD. Despus debe de haber un software intermedio que traslade este protocolo a cada SGBRD particular. Sun califica sta como la alternativa ms flexible pues permite acceder a diferentes bases de datos, ya que es la capa de software intermedia la que se encarga de redirigir las llamadas a una base de datos especfica entre varias. Tipo o Nivel 4: driver nativo escrito completamente en Java. Es especfico para cada SGBRD. Convierte las llamadas JDBC en el protocolo de red usado por la base de datos; por lo tanto si cambiamos de motor de base de datos tendremos que cambiar tambin de controlador.

En nuestra prctica utilizaremos un driver tipo o nivel 1. Existen controladores nativos (niveles 3

4) de empresas propietarias que los ofertan para MS Access, por ejemplo http://www.jnetdirect.com o http://www.idssoftware.com. Pasos Generales para preparar una Aplicacin Java para acceder a una Base de Datos Para preparar nuestra aplicacin Java para que pueda acceder a una Base de Datos, es necesario realizar tres pasos: 1. Cargar el controlador de la base de datos. El controlador define el tipo de base de datos que se va a usar (base de datos de Access, o de MySQL, o de cualquier otro gestor de base de datos) En nuestro caso, tendremos que indicar el controlador para base de datos de Access. 2. Crear un objeto conexin (Connection) Para crear este objeto hay que indicar la situacin del fichero de base de datos, el usuario y la contrasea de dicha base de datos. El objeto conexin abre el fichero de la base de datos. 3. Crear un objeto sentencia (Statement) El objeto sentencia se crea a partir del objeto conexin anterior. Los objetos sentencia permiten realizar acciones sobre la base de datos usando instrucciones SQL. Es decir, a travs del objeto sentencia introduciremos datos en la base de datos, eliminaremos datos, haremos modificaciones, y extraeremos datos de la base de datos. As pues, este objeto es vital. Este objeto es el que realmente permite el acceso a los datos de la base de datos y la manipulacin de dicha base de datos.

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 7

En este ejercicio se pretende crear una pequea aplicacin de bases de datos que permita simplemente mostrar los datos de los clientes almacenados en la base de datos EDD2012.MDB.

1. Entre en NetBeans. Crea un nuevo proyecto (Java Application-llamado AccesoBD. Dentro de este proyecto crear un JFrame llamado ventanaPrincipal:

2. En la parte superior de la ventana aade un botn con el texto Ver Datos Clientes que se llame btnVerDatos.

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 8

En esta primera parte de la prctica se pretende simplemente que al pulsar el botn btnVerDatos aparezcan en un JOptionPane datos sobre los clientes almacenados en la base de datos.

SITUACIN DEL FICHERO DE BASE DE DATOS


3. Antes de empezar con la programacin de nuestra aplicacin, introduciremos el fichero de base de datos en la carpeta del proyecto java que estamos haciendo. Para ello, accede a la carpeta del proyecto AccesoBD. Esta carpeta se encontrar all donde ests guardando tus proyectos:

4. Entra dentro de esta carpeta y observars una serie de carpetas creadas por el propio NetBeans. (Entre ellas, la ms interesante es la llamada src, la cual es la que contiene los ficheros con el cdigo java)

5. Para tener todo bien organizado, crearemos una carpeta llamada Base dentro de la carpeta de proyecto, de manera que su contenido quede as:

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 9

6. Ahora lo nico que tiene que hacer es copiar el fichero de base de datos EDD2012.MDB que se encuentra en la plataforma dentro de la carpeta Base. (La extensin de los ficheros de base de datos de Access es MDB) 7. De esta manera, tenemos el fichero de base de datos que hemos creado con Access guardado dentro de la misma carpeta de proyecto java que usar dicha base de datos. Se recomienda que esto lo haga cada vez que programe una aplicacin de bases de datos Java.

Conexin JDBC-ODBC
Crearemos una conexin indirecta o esttica a nuestra una base de datos por medio de un puente JDBC-ODBC: a. Conexin indirecta o esttica. Necesitamos previamente una fuente de datos definida en el administrador ODBC. getConnection() hace referencia a esta fuente de datos (no al archivo .MDB directamente). 8. Necesitamos que la computadora cliente tenga instalado el controlador ODBC. 9. Puedes comprobar de forma cmoda que est instalado el controlador, accediendo a la aplicacin del sistema "Administrador de orgenes de datos ODBC". Este es el nombre que recibe en XP. En otras versiones recibe un nombre como "Administrador ODBC". En XP accedes a esta aplicacin a travs de "Inicio - Configuracin - Panel de Control - Herramientas administrativas - Orgenes de datos ODBC". En la pestaa "Controladores" puedes ver que est cargado el controlador de MS Access:

10. Crear el Origen de datos Un origen de datos es una etiqueta o Alias (por ejemplo, "mi_BD") que hace referencia a una base de datos, archivo .mdb en MS Access, por ejemplo: c:\doc\java\jdbc01\equipo.mdb". Para "agregar" un origen de datos en "Administrador de origenes de datos ODBC - DSN de Archivo" (en XP) es esencialmente seguir los siguientes pasos:

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 10

a. En la ventana de Administrador de orgenes de datos ODBC, pestaa DSN de usuario, pulsamos en el botn Agregar.

b. Sealar el controlador ODBC que vamos a utilizar y pulsar "Siguiente":

c. Escribe la etiqueta o alias deseado para el origen de datos y pulsar en el botn Seleccionar para indicar la ruta donde se encuentra nuestra BD.

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 11

Ya tenemos creado nuestro Origen de datos mi_BD.

Importante: Cuando usemos un origen de datos ODBC en nuestra aplicacin Java, haremos referencia a la etiqueta o Alias, es el administrador ODBC el que se encarga de buscar fsicamente el archivo (buscarlo en la ruta que previamente has definido al registrar el origen de datos). 11. Ahora ya podemos volver al NetBeans y continuar con nuestro trabajo.

PREPARACIN DE LA APLICACIN JAVA PARA EL ACCESO A LA BASE DE DATOS


12. Para poder acceder y manipular una base de datos, es necesario tener dos objetos: Un objeto del tipo Connection, al que llamaremos conexion. Este objeto define la conexin con la base de datos. Un objeto del tipo Statement, al que llamaremos sentencia. Este objeto permite manipular la base de datos.

13. As pues, lo primero que haremos ser definir estos objetos como globales en la clase de la ventana principal, para as poderlos usar desde cualquier lado:

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 12

Aparecern subrayados ya que ser necesario indicar el import para las clases Connection y Statement. Estos import son respectivamente: java.sql.Connection y java.sql.Statement (Cuidado con este ltimo si utilizamos la ayuda de Netbeans como ya hemos visto en otras prcticas ya que nos da a elegir entre diferentes import, elegir el adecuado java.sql.Statement)

Agrega los import correspondientes para eliminar los errores. 14. Una vez definidos los objetos conexin y sentencia, necesarios para el acceso a la base de datos, prepararemos nuestro programa para que pueda acceder a la base de datos EDD2012.MDB. Esto se har en el constructor. 15. En primer lugar, aade al constructor una llamada a un mtodo PrepararBaseDatos:

16. Crea el mtodo PrepararBaseDatos debajo del constructor y empieza a escribir el siguiente cdigo:

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 13

Resuelve el error que nos da (JOptionPane) con el import que nos sugiere la ayuda de Netbeans. El cdigo que acabas de programar es el primer paso a realizar para el acceso a una base de datos: La Carga del Controlador. Recuerda que el controlador le indica a Java que tipo de base de datos usaremos: Access, MySQL, etc El controlador que le indica al java que usaremos una base de datos de Access viene definido a travs de la siguiente cadena de texto: sun.jdbc.odbc.JdbcOdbcDriver

Y la forma de activar dicho controlador es a travs de la instruccin: Class.forName(controlador).newInstance(); Donde controlador es una variable de cadena que contiene la cadena anterior.

Bsicamente, lo que hacen estas dos lneas de cdigo, es preparar a Java para poder usar Access. En el caso de que se quisiera usar una base de datos realizada en otro programa que no fuera Access, habra que cambiar la cadena de texto correspondiente a su controlador. Por ejemplo, para usar una base de datos creada con el gestor de base de datos MySQL se usa la cadena: com.mysql.jdbc.Driver. Tambin puedes observar que es obligatorio encerrar el cdigo de la carga del controlador entre try catch para capturar cualquier error imprevisto. 17. Ahora aade el siguiente cdigo en el mismo mtodo a continuacin del cdigo anterior:

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 14

Resuelve el error que nos da (DriverManager) con el import que nos sugiere la ayuda de Netbeans. Podemos verificar si lo realizado hasta ahora va correctamente, para ello solo tenemos que llamar a nuestro formulario desde Main, ejecutamos el proyecto y si aparece el formulario sin ningn error en un JOptionPane, todo marcha correctamente.

Posibles errores:
El cdigo que acabas de aadir se corresponde con el segundo paso para acceder a una base de datos: Crear el objeto Conexin. El objeto conexin es el que efecta la conexin real con la base de datos. Se podra decir que es el objeto que permite abrir la puerta del fichero de base de datos para entrar en l. Para construir este objeto conexin (el cual ya est declarado en la parte global de la clase) hacen falta tres datos: El nombre del usuario que manipular la base de datos. En el caso de Access no necesitamos indicar ningn nombre de usuario, por eso vers la instruccin:

String user = ; El password del usuario que manipular la base de datos. En el caso de Access tampoco necesitaremos ningn password, por eso vers la instruccin:

String password = ; La DSN de la base de datos. DSN significa nombre del origen de datos y es una cadena de texto que contiene informacin sobre el fichero de base de datos que queremos usar. La parte inicial de la cadena de la DSN siempre ser igual para las bases de datos de Access: "jdbc:odbc:mi_BD"

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 15

Sin embargo, lo que nos interesa realmente de esta cadena es su parte final, donde hay que indicar LA ETIQUETA O ALIAS CREADA EN EL PASO 11 (Origen de datos) Finalmente se usa la instruccin conexion=DriverManager.getConnection(DSN,user,password); para crear la conexin. Al igual que con el primer paso, es necesario rodear la creacin de la conexin con un trycatch para capturar cualquier error inesperado que se pueda producir en este paso.

18. Ahora completaremos nuestro mtodo PrepararBasedatos aadiendo el siguiente cdigo a continuacin del anterior:

Resuelve el error que nos da (DriverManager) con el import que nos sugiere la ayuda de Netbeans.

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 16

Este cdigo que acabas de aadir se corresponde con el tercer paso necesario para poder acceder a una base de datos: Creacin del objeto Sentencia. El objeto sentencia ser el que nos permita ejecutar rdenes SQL sobre la base de datos. Es decir, el objeto que nos permite actuar y manipular la base de datos. Este objeto es vital, y es el objetivo de toda esta preparacin. El objeto sentencia se crea a partir del objeto conexin creado en el paso anterior, usando la siguiente instruccin:
sentencia=conexion.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

Y como sucedi en los dos pasos anteriores, es necesario rodear esta instruccin con un trycatch para capturar cualquier tipo de error inesperado que se pudiera producir.

19. As pues ya tenemos preparado nuestro programa para acceder a la base de datos. Esta preparacin se realiza en el momento en que se ejecuta el programa, ya que hemos introducido este cdigo en el constructor. Es cierto que este cdigo puede resultar bastante abstracto y complejo, pero tiene la gran ventaja de que siempre es igual. Para nuestras BD de Access, solo tendremos que cambiar la Etiqueta o Alias de la base de datos que se est usando en ese momento. El resto del cdigo queda igual. 20. El objetivo de todo este cdigo de preparacin para el acceso al fichero de la base de datos es obtener un objeto llamado sentencia que nos posibilitar la manipulacin de los datos de la base de datos, usando rdenes SQL. En este ejercicio usaremos el objeto sentencia para averiguar informacin acerca de los clientes.

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 17

REALIZAR CONSULTAS SQL USANDO EL OBJETO SENTENCIA


21. Cuando se pulse el botn Ver Datos de Clientes en nuestro formulario tendremos que extraer los datos de la tabla Clientes para poder mostrarlos. Para ello, escribe el siguiente cdigo dentro del evento actionPerformed del botn btnVerDatos:

Observa el cdigo:
ResultSet r = sentencia.executeQuery(select * from CLIENTES order by nombre);

El objeto sentencia se usa para dar rdenes a la base de datos. Esas rdenes se dan usando el lenguaje de consulta SQL. Se usa el mtodo executeQuery del objeto sentencia para ejecutar la consulta SQL select * from CLIENTES order by nombre. Esta consulta extraer todos los datos de la tabla Clientes ordenados por nombre. El mtodo executeQuery recibe como parmetro una cadena representando la consulta SQL. No es necesario indicar el punto y coma final de la consulta SQL. El resultado de la consulta se guarda en un objeto del tipo ResultSet al que se ha llamado simplemente r. Los objetos ResultSet almacenan el resultado de una consulta SQL. Y como puedes observar, es necesario rodear la ejecucin de una consulta SQL con un trycatch para capturar errores inesperados al realizar la consulta.

LOS OBJETOS RESULTSET

22. Como hemos dicho anteriormente un objeto ResultSet almacena el resultado de una consulta SQL. Debes imaginarte el objeto ResultSet r como una tabla que contiene el resultado de la consulta SQL que se ha ejecutado. En nuestro caso, la consulta SQL que hemos ejecutado ha extrado toda la tabla Clientes. Por tanto nuestro ResultSet contiene toda la tabla Clientes.

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 18

El objeto r por tanto podra representarse as: NOTA IMPORTANTE.- Las imgenes de la tabla utilizadas para la explicacin NO se corresponde con la Base de Datos utilizada EDD2012.MDB. Las pantallas de ejecucin del proyecto SI.

Clientes
Nombre Apellidos Ventas Fecha Codigo BOF 21.123.123-A Ana Ruiz 1200 02/03/2002 3322-ASR 22.333.444-C Francisco Lpez 1000 01/06/2006 1144-BBB 12.321.567-B Juan Prez 1120 04/05/2002 4433-ABB EOF DNI

La fila BOF significa comienzo de fichero y representa una fila anterior al primer registro del ResultSet. La fila EOF significa final de fichero y representa una fila posterior al ltimo registro del ResultSet. La flecha indica la posicin actual donde estamos situados dentro de la tabla del ResultSet. 23. El mtodo next (lnea 107 del cdigo de la imagen) del ResultSet hace que avancemos una fila en el ResultSet. Es decir, ahora estaremos situados en la primera fila del ResultSet (la flecha avanza una posicin)

Clientes
Nombre Apellidos Ventas Fecha Codigo BOF 21.123.123-A Ana Ruiz 1200 02/03/2002 3322-ASR 22.333.444-C Francisco Lpez 1000 01/06/2006 1144-BBB 12.321.567-B Juan Prez 1120 04/05/2002 4433-ABB EOF DNI

24. Ahora que estamos situados en la posicin del primer Cliente (Ana), podemos extraer informacin referente a sus campos. Lo que se ha hecho primero es declarar una variable de cadena llamada info. Luego, a esta variable se le ha asignado una concatenacin de cadenas:
info="El trabajador se llama "+r.getString("nombre";

(Error. Debera poner el Cliente se llama Arrglalo). Lo interesante de esto es el mtodo getString del objeto ResultSet r. El mtodo getString permite extraer una cadena con el valor del campo indicado como parmetro. En nuestro caso: r.getString(nombre)

Extrae el nombre del cliente actual (Ana)

Si desearamos los apellidos o ventas: r.getString(Apellidos) Extrae los apellidos del cliente actual (Ruiz)

EDD 2012
r.getString(Ventas)

PRACTICA 8 (Parte I)

NETBEANS | 19

Extrae las ventas del cliente actual (1200)

Luego se muestra la cadena info en un simple JOptionPane. 25. Ejecuta nuestro proyecto.

El primer cliente de nuestra BD EDD2012.MDB se llama ALBERTO. 26. Sigamos haciendo cambios en el cdigo del botn para entender mejor el funcionamiento de los ResultSet. Aade solo la siguiente lnea (113):

27. Se ha aadido un segundo next. Esto producir que la flecha avance dos posiciones en el ResultSet, y por tanto se coloque en la segunda fila:

Clientes
Nombre Apellidos BOF 21.123.123-A Ana Ruiz 22.333.444-C Francisco Lpez 12.321.567-B Juan Prez EOF DNI Venta Fecha Codigo

1200 02/03/2002 3322-ASR 1000 01/06/2006 1144-BBB 1120 04/05/2002 4433-ABB

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 20

28. Esto quiere decir que si se ejecuta el programa se mostrar informacin sobre Francisco Lpez. Ejecuta el proyecto y observa que el 2 cliente de nuestra BD EDD2012.MDB se llama Enrique.

29. Los objetos ResultSet poseen diversos mtodos para cambiar la posicin actual en la tabla del ResultSet. Dicho de otro modo: para mover la flecha. Veamos algunos de estos mtodos (se supone que el objeto ResultSet se llama r): r.next(); r.previous(); r.first(); r.last(); r.beforeFirst() r.afterLast() r.absolute(n) Mueve la flecha a la siguiente fila Mueve la flecha a la fila anterior Mueve la flecha a la primera fila Mueve la flecha a la ltima fila Mueve la flecha a la fila BOF Mueve la flecha a la fila EOF Mueve la flecha a la fila n del ResultSet. Las filas se empiezan a numerar por 1.

30. Haga el siguiente cambio en el actionPerformed simplemente para experimentar:

En este caso la flecha se coloca en EOF (afterLast) y luego retrocede una fila (previous). Por tanto, al ejecutar el programa se mostrarn los datos del ltimo cliente. Compruebalo. (Se llama MARTA)

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 21

Grfico explicativo de lo que ha ocurrido. Primero vamos a EOF y luego retrocedemos, con lo cual nos situamos en el ltimo cliente. 31. Como ves, podemos movernos dentro del contenido del ResultSet gracias a todos estos mtodos, para luego poder extraer los datos de la fila correspondiente. Ahora, estudiaremos la forma de recorrer todas las filas del ResultSet para as extraer la informacin de todos sus registros. 32. Vamos a modificar nuestro cdigo para que se muestren todos los Clientes del ResultSet. Para ello, realiza el siguiente cambio:

En este cdigo se ha inicializado la variable info a la cadena vaca y luego se ha aadido un bucle. Analicemos este bucle: Lo primero que se hace es colocar explcitamente la flecha en la fila BOF, es decir, antes del primer cliente:
r.beforeFirst();

Luego tenemos un bucle while que comienza as:


while (r.next()) {

El mtodo next intenta colocar la flecha en la siguiente fila, y si lo hace bien, devuelve el valor verdadero. Cuando no se puede avanzar ms, el mtodo next devolver falso.

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 22

As pues, este while significa mientras se haya podido avanzar una fila, haz lo siguiente. O dicho de otro modo, este bucle se repetir para cada fila de la tabla del ResultSet. Si analizamos el contenido del bucle, bsicamente veremos una concatenacin de cadenas dentro de la variable info. En cada vuelta del bucle se concatenar el nombre, y la poblacin de cada cliente.

Finalmente se visualiza la variable info en un JOptionPane.

33. Ejecuta el programa y comprueba su funcionamiento. -

34. El bucle que acabas de programar es un cdigo clsico para manipular un ResultSet. Siempre que quieras recorrer todas las filas del ResultSet hars algo como esto: r.beforeFirst(); while (r.next()) { manipulacin de la fila }

35. Se ha visto que para obtener un dato de la fila actual se usa el mtodo getString indicando como parmetro el dato que se quiere obtener. Por ejemplo: r.getString(ventas);

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 23

Obtiene las ventas sealado actualmente con la flecha. Este sueldo se obtiene convertido en cadena. Los ResultSet poseen otros mtodos para obtener los datos convertidos en nmeros como son: getInt(campo) y getDouble(campo) para obtener el dato en entero o double, respectivamente. Esto nos permite el realizar operaciones con los datos extrados del ResultSet.

36. Una vez finalizado el programa, es una buena costumbre cerrar la base de datos que estamos manejando. Esto se hace cerrando la conexin con la base de datos. Para hacer esto se usa el mtodo close del objeto conexin. Esto se har en el momento en que se finalice el programa, es decir, en el evento windowClosing de la ventanaPrincipal:

EDD 2012

PRACTICA 8 (Parte I)

NETBEANS | 24

Como ves, tambin hay que encerrar este cdigo entre trycatch para evitar posibles errores.

CONCLUSIN Para crear un programa Java que pueda usar una base de datos ser necesario realizar los siguientes pasos: - Colocar el fichero de base de datos en una subcarpeta de la carpeta del proyecto java. - Preparar el acceso a la base de datos (en el constructor) * Se crearn dos objetos: conexin (Connection) y sentencia (Statement) * Se cargar el controlador del tipo de base de datos a usar * Se crear el objeto conexin indicando el Origen de la base de datos. * Se crear el objeto sentencia a partir del objeto conexin - Se usar el objeto sentencia para ejecutar consultas SQL en la base de datos. - Las consultas SQL ejecutadas en la base de datos se almacenan en objetos del tipo ResultSet - Un objeto ResultSet tiene forma de tabla conteniendo el resultado de la consulta SQL * Los objetos ResultSet tienen mtodos para seleccionar el registro de la tabla * Los objetos ResultSet tienen mtodos que permiten extraer el dato de un campo en concreto.