11
P P R R O O G G R R A A M M A A C C I I Ó Ó N N O O R R I I E E N N T T A A D D A A A A O O B B J J E E T T O O S S A A P P L L I I C C A A D D A A A A B B A A S S E E S S D D E E D D A A T T O O S S Por LAURA NOUSSAN LETTRY Operaciones sobre Bases de Datos - Parte 1 Aviso Legal El presente libro electrónico se distribuye bajo Attribution-NonCommercial- NoDerivs 3.0 Unported

POOABD (POO Aplicada a B Datos) - ABMC parte 1

Embed Size (px)

DESCRIPTION

Se aborda cómo crear una vista de aplicación para manipular los datos del Sistema de Base de Datos utilizando Java y cómo se vincula esta vista con la vista de negocio. Se aplican los conceptos vistos durante el Capítulo 2 sobre mapeo de tablas y el API JDBC para organizar las ABM (Altas, Bajas y Modificaciones) así como las consultas sobre las tablas. La Vista de aplicación, por lo tanto, es la encargada de gestionar los datos que son ingresados por el usuario o las consultas que este realice. Las clases de nivel superior interactúan directamente con el usuario, o mejor, dicho, reciben eventos desde el usuario y se comunican con las clases bases que mapean a las tablas de la base de datos. En un nivel más bajo la comunicación se establece con las clases java que se comunican con el API-JDBC para enviar las sentencias necesarias para realizar las operaciones SQL – DML de INSERT, UPDATE, DELETE y SELECT Los Temas tratados en esta parte son: 1. Clases de operaciones básicas a realizar sobre Bases de Datos Relacionales. SQL-DML. 2. Creación de la Vista de Aplicación con JFrame, JInternalFrame y Menús avanzados en Java Swing. 3. Operaciones ABM (Altas, Bajas y Modificaciones) en un entorno de desarrollo. SQL-DML. 4. Consultas a la Base de datos en un entorno de desarrollo.

Citation preview

Page 1: POOABD (POO Aplicada a B Datos) - ABMC parte 1

PPPRRROOOGGGRRRAAAMMMAAACCCIIIÓÓÓNNN OOORRRIIIEEENNNTTTAAADDDAAA AAA OOOBBBJJJEEETTTOOOSSS AAAPPPLLLIIICCCAAADDDAAA AAA BBBAAASSSEEESSS DDDEEE DDDAAATTTOOOSSS

Por

LAURA NOUSSAN LETTRY

Operaciones sobre Bases de Datos - Parte 1

Aviso Legal El presente libro electrónico

se distribuye bajo Attribution-NonCommercial-

NoDerivs 3.0 Unported

Page 2: POOABD (POO Aplicada a B Datos) - ABMC parte 1

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

ÍNDICE

Operaciones sobre Bases de Datos – PARTE 1

Introducción

1. Clases de operaciones básicas a realizar sobre Bases de Datos Relacionales. SQL-DML.

2. Creación de la Vista de Aplicación con JFrame, JInternalFrame y Menús avanzados en Java Swing.

3. Operaciones ABM (Altas, Bajas y Modificaciones) en un entorno de desarrollo. SQL-DML.

4. Consultas a la Base de datos en un entorno de desarrollo. Uso del Control Swing JTable.

1 2 2 7

ACTIVIDADES Unidad 3 Tareas

Parte 1 Lectura, trabajos, prácticas propuestas en el Website de la Materia.

(*): En el Website de la materia:

http://www.lnoussanl.com.ar/javabd/

FUENTES Bibliográficas Consultadas

1. Documentación sobre Swing:

http://docs.oracle.com/javase/tutorial/uiswing/index.html

2. API JDBC:

http://www.oracle.com/technetwork/java/overview-141217.html

The Java Tutorial: http://docs.oracle.com/javase/tutorial/jdbc/index.html

BIBLIOGRAFÍA para el Alumno

1. Contenidos de esta Unidad

2. Programas fuentes linkeados en el site web de la materia y que son complementarios al contenido.

3. Demás material bibliográfico linkeado en el sitio web de la materia.

(*)

Page 3: POOABD (POO Aplicada a B Datos) - ABMC parte 1

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

Operaciones sobre Bases de Datos – PARTE 1

INTRODUCCIÓN

Esta parte trata de cómo crear una vista de aplicación para manipular los datos utilizando Java y cómo se vincula esta vista con la vista de negocio.

Se aplican los conceptos vistos durante el Capítulo 2 sobre mapeo de tablas y el API JDBC para organizar las ABM (Altas, Bajas y Modificaciones) así como las consultas sobre las tablas.

La Vista de aplicación, por lo tanto, es la encargada de gestionar los datos que son ingresados por el usuario o las consultas que este realice. Las clases de nivel superior interactúan directamente con el usuario, o mejor, dicho, reciben eventos desde el usuario y se comunican con las clases bases que mapean a las tablas de la base de datos. En un nivel más bajo la comunicación se establece con las clases java que se comunican con el API-JDBC para enviar las sentencias necesarias para realizar las operaciones SQL – DML de INSERT, UPDATE, DELETE y SELECT

Page 4: POOABD (POO Aplicada a B Datos) - ABMC parte 1

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

OPERACIONES SOBRE BASES DE DATOS– parte 1 pág. 1/8

OPERACIONES SOBRE BASES DE DATOS

Clases de operaciones básicas a realizar sobre Bases de Datos Relacionales. SQL-DML.

Concepto

Las clases básicas de operaciones a realizar sobre bases de datos relacionales tienen que ver con el SQL DML, es decir, con operaciones tendientes a manipular los datos almacenados. Por lo tanto es importante repasar todo lo visto sobre SQL y en particular SQL-DML.

Las operaciones SQL-DML que se llevarán a cabo se pueden dividir en dos grupos:

a) Operaciones que nos permitirán actualizar los datos de la base de datos

b) Operaciones que nos devolverán un resultado para poder mostrar la información al usuario mediante pantallas o informes.

Operaciones de actualización

Las operaciones que nos permitirán actualizar la base de datos son sentencias SQL –DML: INSERT, UPDATE y DELETE.

Un aspecto importante aquí es que para poder modificar o eliminar registros debemos primero encontrar el registro a modificar o eliminar; por lo tanto la obtención del dato es fundamental y lógicamente implica una búsqueda del registro, mediante la clave primaria utilizando una sentencia SELECT.

Operaciones con consultas e informes

Las operaciones para devolver información al usuario utilizan la sentencia SELECT simple o con restricciones o proyecciones y pueden incluir una o más tablas. Ya se trate de una consulta por pantalla o de un informe, siempre la manera de obtener los datos es mediante uno o más SELECT.

Aspectos importantes a tener en cuenta

Las sentencias SQL-DML deben enviarse desde la aplicación, es decir desde las clases de nivel superior que gestionan los formularios ABM o los formularios de consultas.

Las clases bases y las clases CORE que se comunican con el API JDBC están en el nivel más bajo de la aplicación y capturan las sentencias SQL DML y las envían al API para actualizar la base de datos u obtener los datos necesarios.

Creación de la Vista de Aplicación con JFrame, JInternalFrame y Menús avanzados en Java Swing.

Ya en la Unidad 2 hemos visto la utilización de estos formularios, a la cual nos remitimos. Haciendo un repaso de los conceptos sobre objetos vistos, la aplicación tiene que tener un solo formulario iniciador o runtime de modo tal que la aplicación sea del tipo MDI. Ello se logra mediante la utilización de la clase JFrame del paquete JavaSwing.

El formulario principal (clase JFrame) tiene una estructura que permite vincular y contener el Menú Principal y los diferentes formularios que son llamados a través del menú. Para lograr esto, el JFrame debe tener como mínimo dos contendores: uno que contendrá el menú principal y otro que permita vincular los diferentes formularios que son llamados a través del menú principal.

El menú principal utiliza como contenedor un objeto de la clase JMenuBar. La construcción del menú puede apreciarse en el capítulo 2, siendo fácil e intituitiva su construcción. Utiliza la lógica jerárquica ya que en el contendor o JMenuBar tenemos los JMenu y contenidos en los JMenu los JMenuItem. En el capítulo 2 parte 2 está desarrollado la creación de Menús.

Los formularios que permiten realizar las ABM y las consultas/informes son objetos JInternalFrame, formularios internos, como su nombre lo indica que no cuentan con un método main o runtime y son añadidos al JFrame mediante un panel contenedor: JDesktopPane.

Siguiendo el ejemplo didáctico de la Escuela, la imagen muestra la vista de la aplicación, separada de la vista del negocio: las clases coloreadas en rojo corresponden a la vista de aplicación, es decir, son los diferentes JInternalFrame que realizarán las operaciones ABM o las consultas.

Las clases coloreadas en amarillo, son las clases base, aquellas que surgen del mapeo de las tablas y forman parte de la vista del negocio. Las clases coloreadas en color fucsia son clases que pertenecen Pr

of. L

aura

NOUSS

AN -

LETT

RY

Page 5: POOABD (POO Aplicada a B Datos) - ABMC parte 1

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

OPERACIONES SOBRE BASES DE DATOS– parte 1 pág. 2/8

también a la vista del negocio, pero son todavía de más bajo nivel puesto que su objetivo es comunicarse con el API JDBC y dejar en este nivel toda la complejidad de las Excepciones.

Operaciones ABM (Altas, Bajas y Modificaciones) en un entorno de desarrollo. SQL-DML.

Hemos agregado una clase más al paquete CORE, que nos permitirá enviar los datos ingresados por el usuario (en el nivel de la Vista de Aplicación) al API JDBC y desde allí a la base de datos.

En la vista de aplicación tendremos los formularios que gestionarán las Altas, Bajas y Modificaciones, es decir que llevarán a cabo las inserciones, modificaciones o eliminaciones de datos de la base de datos. En realidad, en este nivel (vista de aplicación) sólo se enviarán sentencias INSERT, UPDATE y DELETE o SELECT mediante cadenas que serán tomados por las clases base y por las clases de manipulación de datos del paquete CORE.

El proyecto TOI_APP_MODELO_etapa1 desarrollado en Netbeans, permitirá entender la estructura de la aplicación.

La clase TOI_APP_MODELO_ETAPA_1.java es el formulario principal, un JFrame y está ubicado en el paquete del mismo nombre.

En este paquete también tenemos las clases bases que son aquellas que mapean a las tablas de la base de datos: Alumno.java, Localidad.java, Materia.java y Nota.java.

También podemos apreciar que hay otras dos clases: consuMaterias.java y gesMaterias.java. Estas son clases JInternalFrame que permiten llevar a cabo las consultas y las ABM, respectivamente.

También podemos ver que existe otro paquete, el paquete CORE y que está formado por las clases que ya hemos visto en el capítulo 2: Conectar.java y UsarConexion.java.

Prof

. Lau

ra N

OUSSAN

- LE

TTRY

Page 6: POOABD (POO Aplicada a B Datos) - ABMC parte 1

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

OPERACIONES SOBRE BASES DE DATOS– parte 1 pág. 3/8

También podemos ver que hemos agregado el controlador JDBC MySQL en las librerías.

Estaría faltando crear las otras clases que permitan llevar a cabo las consultas y ABM sobre las otras tablas con que cuenta la base de datos, es decir, que permitan operar sobre las tablas Localidades, Alumnos y Notas.

Sin embargo, el procedimiento es el mismo, cambian los atributos que tienen estas tablas y las claves foráneas, que la tabla Materias no tiene.

En las siguientes imágenes se muestran los dos formularios de la clase JInternalFrame que gestionan las ABM y las consultas de la tabla Materias.

El formulario gesMaterias.java, que como ya dijimos, pertenece a la clase JInternalFrame y en definitiva gestiona las ABM (SQL INSERT, UPDATE, DELETE) de la Tabla Materias.

El formulario tiene habilitado el botón Agregar y el botón Buscar, estando los demás deshabilitados. Esto se configura directamente desde la ventana de propiedades del JInternalFrame. El motivo de que los botones Modificar y Borrar estén desactivados es que sólo se puede borrar o modificar un registro a la vez, y para ello el usuario debe primero solicitar al DBMS el registro que quiere modificar o eliminar, lo cual se lleva a cabo mediante el código fuente del botón Buscar.

Este es el formulario que gestiona las consultas, y que por el momento los resultados serán mostrados en un componente nuevo: JTextArea de la librería JavaSwing.

Prof

. Lau

ra N

OUSSAN

- LE

TTRY

Page 7: POOABD (POO Aplicada a B Datos) - ABMC parte 1

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

OPERACIONES SOBRE BASES DE DATOS– parte 1 pág. 4/8

OPERACIONES ABM

OPERACIÓN de ALTA (SQL INSERT)

A continuación se explica el código del botón Agregar del formulario gesMaterias.java

El código tiene dos controles de validación importantes: 1º que el usuario esté conectado para poder realizar la inserción y el 2º que haya completado todos los cuadros de texto necesarios (recordar que la mayoría de los atributos de las tablas fueron diseñados como obligatorios, es decir, no se aceptan valores nulos, salvo excepcionalmente).

Si el usuario no cumple con estos requisitos se muestra un mensaje, lógicamente. No hay que olvidar que las aplicaciones están dirigidas a los usuarios finales, que son personas.

Si se cumple con los requisitos se crea un objeto Materia que tiene como variables los datos que ha ingresado el usuario en los cuadros de texto (recordar que hay que utilizar las funciones de conversión de datos que hemos visto con anterioridad)

También tenemos que poder pasar estos datos que ingresó el usuario como una cadana de tipo String con el SQL necesario (línea 172) y para ello utilizamos el objeto encapsulado Materia. ¡Esto es sumamente importante! No pasamos los datos ingresados por el usuario en forma directa a la cadena, sino que utilizamos el objeto Materia para encapsular la información!

Finalmente en las líneas 173 y 174 utilizamos las clases del paquete CORE para que la cadena pueda ser pasada al API-JDBC: primero se crea un objeto UsarConexion y luego se llama al método ABM de esta clase.

OPERACIÓN de MODIFICACIÓN (SQL UPDATE)

Para modificar los datos es necesario lógicamente que el usuario esté conectado pero también que haya encontrado el registro que quiere modificar. Esto también es válido para eliminar un registro, de lo contrario podríamos modificar o eliminar todos los registros de la tabla.

Así pues lo primero que debe hacer el usuario, además de estar conectado, es buscar el registro que quiere modificar. Esto se lleva a cabo mediante el botón BUSCAR.

Como en el caso anterior, primero se valida que el usuario esté conectado (línea 221).

También se deshabilita, por precaución, el botón Agregar.

La cadena de búsqueda debe ser un SELECT con restricción, para lo cual se debe utilizar la clave primaria, como se puede apreciar en la línea 209. El usuario, para ello debe ingresar el ID de la materia que quiere recuperar los datos.

Las líneas que siguen son invocaciones a la clase UsarConexion del paquete CORE. La primera línea permite devolver la conexión que tiene el usuario a la base de datos.

Con el código usarLaConexion.Consultar(cadena), estamos pasando la cadena de búsqueda, es decir el SQL necesario para obtener un registro.

Necesitamos un arreglo de tipo cadena (línea 229) para devolver todas las columnas del registro, si es que este existe. Pr

of. L

aura

NOUSS

AN -

LETT

RY

Page 8: POOABD (POO Aplicada a B Datos) - ABMC parte 1

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

OPERACIONES SOBRE BASES DE DATOS– parte 1 pág. 5/8

El siguiente código if(usarLaConexion.getCantidadRegistros()>0); utiliza la clase del paquete Core para saber la cantidad de filas que devuelve la consulta. Este método ha sido agregado en la clase UsarConexion ya que si la consulta no devuelve registros (la cantidad de filas = 0) hay que indicárselo al usuario.

Finalmente, si el registro existe (es decir, si la longitud del arreglo es mayor que cero) asignamos a las variables de los cuadros de texto idmateria y nom_materia los valores devueltos por el API-JDBC.

En este formulario sólo tenemos dos cuadros de texto: el ID de la materia y el nombre de ésta. Se utiliza

La sintaxis: this.idmateria.getText(datosTabla[0]); porque este idmateria es un atributo de la clase gesMateria.java, es decir, espcíficamente es el nombre de variable del cuadro de texto o JTextField correspondiente al ID de la materia. El método setText es un método de la clase JTextField que permite asignar un valor al cuadro de texto, es decir, el que tiene la columna idmateria de la tabla Materia.

El código this.nom_materia.setText(datosTabla[1]); lo que hace es asignarle a la variable nom_materia del JTextField correspondiente al nombre de la materia el valor que el atributo nom_materia de la tabla Materias tiene.

La siguiente imagen muestra el código que se ejecuta al presionar el botón MODIFICAR, ya que el usuario ya trajo los datos del registro que quiere modificar:

El código tiene las líneas necesarias para validar que el usuario no haya dejado cuadros de texto en blanco (esto por cómo hemos diseñado la base de datos)

Prof

. Lau

ra N

OUSSAN

- LE

TTRY

Page 9: POOABD (POO Aplicada a B Datos) - ABMC parte 1

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

OPERACIONES SOBRE BASES DE DATOS– parte 1 pág. 6/8

En la línea 197 tenemos la creación del objeto Materia, con lo cual encapsulamos los datos ingresados por el usuario y más adelante la cadena de modificación, es decir, la sentencia SQL UPDATE, que toma los datos del objeto previamente creado.

Las líneas que siguen son del paquete CORE, las mismas que hemos utilizado para hacer el INSERT, y a cuya explicación nos remitimos.

OPERACIÓN de ELIMINACIÓN o BORRADO (SQL DELETE)

Como en el caso de las modificaciones, para eliminar un registro de la tabla el usuario debe solicitar dicho registro, motivo por el cual también es necesario utilizar el botón buscar.

El método que se utiliza es el mismo visto con anterioridad para las modificaciones, a las cuales nos remitimos.

La siguiente imagen muestra el código necesario para eliminar un registro de la tabla Materias.

Como en los casos anteriores, se verifica previamente que el usuario haya realizado la búsqueda y los datos de los cuadros de texto no estén vacíos.

Se crea con posterioridad un objeto Materia que sirve para después crear la cadena que será pasada al API para eliminar el registro (líneas 255 a 26).

Prof

. Lau

ra N

OUSSAN

- LE

TTRY

Page 10: POOABD (POO Aplicada a B Datos) - ABMC parte 1

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

OPERACIONES SOBRE BASES DE DATOS– parte 1 pág. 7/8

Las siguientes líneas de código son las mismas que las utilizadas para la modificación de datos.

Consultas a la Base de datos en un entorno de desarrollo. Uso del Control Swing JTable.

Las consultas a la Base de datos siempre implican la utilización de la sentencia SQL SELECT. Como sabemos, las consultas pueden tener restricciones, proyecciones o ambas operaciones. Además las consultas pueden incluir más de una tabla.

Recomendamos repasar estos temas que han sido abordados en la Unidad 1.

Por el momento se utilizará un nuevo control Swing: JTextArea, que permitirá ver los datos devueltos en forma de texto. Más adelante abordaremos el uso del control JTable.

También por ahora, se utilizará la consulta general, es decir el SELECT sino ninguna restricción ni proyección y sobre la tabla que estamos consultando. Más adelante, en una etapa 2 de la aplicación utilizaremos consultas más complicadas, que dependerán de los parámetros que ingrese el usuario.

Si es importante también hacer notar que los informes surgen de las consultas, tema que será abordado con posterioridad en la parte 2 de este capítulo mediante el uso de un plugin.

Ahora tenemos que remitirnos a la imagen del formulario consuMaterias.java, que es de la clase JInternalFrame. Este formulario tiene un solo botón y un JTextArea. El código fuente se muestra a continuación, y cabe aclarar que es el mismo que se ha visto en la Unidad 2

Prof

. Lau

ra N

OUSSAN

- LE

TTRY

Page 11: POOABD (POO Aplicada a B Datos) - ABMC parte 1

PPOOOO AAPPLLIICCAADDAA AA BBAASSEESS DDEE DDAATTOOSS

OPERACIONES SOBRE BASES DE DATOS– parte 1 pág. 8/8

Como vimos con anterioridad para las ABM, lo primero es validar que el usuario esté conectado a la base de datos.

Luego la variable cadena tiene asignada la setencia SQL clásica de consulta.

Las siguientes líneas tienen que ver con los datos que se le deben o deberían mostrar al usuario: los nombres de los atributos y los datos que tienen estos atributos para los diferentes registros de la tabla Materias.

De allí que tengamos dos variables de tipo String: titColumnas[] que es un arreglo de cadenas y datos que es una cadena que contendrá los datos contenidos en la tabla.

Las siguientes líneas hacen uso de la clase UsarConexion del paquete CORE.

UsarConexion consulta = new UsarConexion(Conectar.getConexion()));

Esta línea devuelve la coneixión que tiene abierta el usuario y se asigna a la variable consulta que es de tipo UsarConexion

La línea consulta.Consultar(cadena); le pasa a la clase UsarConexion la consulta y se le indica que se queire consultar la base de datos

Las dos líneas que siguen implican que se ejecutó la consulta y asignan tanto los nombres de las columnas de la tabla Materias y los datos de cada uno de los registros.

La línea this.areaConsulta.setText(mostrarConsulta(titColumnas,datos)); lo que hace es asignar al JTextArea el resultado de la consulta.

Para ello se utiliza el método mostrarConsulta, que es un método de la clase consuMaterias.java, y que se puede apreciar en la imagen a partir de la línea 118.

Prof

. Lau

ra N

OUSSAN

- LE

TTRY