10

Click here to load reader

Tema 10 Consulta Datos JTable Select

Embed Size (px)

Citation preview

Page 1: Tema 10 Consulta Datos JTable Select

Universidad Católica Los Ángeles de Chimbote – Programación Visual II

OBJETO JTABLE Y COMANDO SELECT EN CONSULTA DE DATOS

Comando SELECT y sus claúsulas

La sentencia SELECT es usada para obtener la información guardada en una

tabla. La forma general de esta sentencia es:

SELECT LaInformaciónQueDeseamos FROM DeQueTabla WHERE CondiciónASatisfacer

Aquí, LaInformaciónQueDeseamos es la información que queremos ver. Esta

puede ser una lista de columnas, o un * para indicar "todas las columnas".

DeQueTabla indica el nombre de la tabla de la cual vamos a obtener los datos. La

Ing. Martín Salcedo Quiñones Página 1

Page 2: Tema 10 Consulta Datos JTable Select

Universidad Católica Los Ángeles de Chimbote – Programación Visual IIclaúsula WHERE es opcional. Si está presente, la CondiciónASatisfacer especifica

las condiciones que los registros deben satisfacer para que puedan ser mostrados.

Podemos seleccionar sólo registros particulares de una tabla. Por ejemplo, si

deseamos visualizar las escuelas profesionales de la facultad de ingeniería:

Select e.nombre from escuela e, facultad f where e.idfacultad=f.idfacultadAnd f.nombre=”Ingenieria”;

Podemos también combinar condiciones, por ejemplo, visualizar los planes de

estudio del primer ciclo, perteneciente a la escuela profesional de Ingeniería de

Sistema:

Select c.nombre, horasteoricas, horaspractica, horaslaboratorio, nrocreditos fromPlan_estudios p, curso c, escuela e where p.idcurso=c.idcurso and p.idescuela=e.idescuela and e.nombre=”Ingenieria de Sistemas” and ciclo=1;

Se debe notar en los ejemplos anteriores que las filas regresadas son mostradas

sin ningún orden en particular. Sin embargo, frecuentemente es más fácil

examinar la salida de una consulta cuando las filas son ordenadas en alguna

forma útil. Para ordenar los resultados, tenemos que usar una cláusula ORDER BY.

Select e.nombre from escuela e, facultad f where e.idfacultad=f.idfacultadAnd f.nombre=”Ingenieria” order by e.nombre;

Podemos ordenar múltiples columnas. Por ejemplo, para ordenar por ciclo de los

planes de estudio y por el número de créditos, el cual se ordenará de forma

descendente, usaremos la siguiente consulta:

Select ciclo,c.nombre, horasteoricas, horaspractica, horaslaboratorio, nrocreditos from Plan_estudios p, curso c, escuela e where p.idcurso=c.idcurso and p.idescuela=e.idescuela and e.nombre=”Ingenieria de Sistemas”order by ciclo, nrocreditos desc;

Consulta de Datos usando PreparedStatement

En esta oportunidad vamos a utilizar el interface PreparedStatement para preparar

la consulta, cuya ejecución devolverá los resultados a un objeto ResultSet.

Ing. Martín Salcedo Quiñones Página 2

Page 3: Tema 10 Consulta Datos JTable Select

Universidad Católica Los Ángeles de Chimbote – Programación Visual IISeguimos usando la base de datos universidad, construyendo en esta oportunidad

una consulta que muestre los planes de estudio que pertenecen a una escuela

profesional seleccionada.

Para diseñar y desarrollar la aplicación seguiremos los siguientes pasos:

1. En la clase Acceso agregamos el siguiente método BuscaPlanesEscuela:

El método BuscaPlanesEscuela se inicia invocando al método sta() que a su

vez utiliza el método Enlace(), este último establece la conexión con la base de

datos, por lo tanto el objeto conn deja de ser null y contiene la información

necesaria de la conexión con la base de datos universidad. Se declara la

variable sql de tipo String, que contiene una consulta que hace uso de la vista

creada anteriormente en una de las sesiones de este curso. Esta consulta lo

que busca es obtener los datos de los planes de estudio que pertenecen a una

escuela profesional. Luego se declara y se construye una variable objeto ps

del tipo PreparedStatement que a partir del objeto conn de tipo Connection se

indica la sentencia select a ejecutar. Como la sentencia select tiene un signo ?

que indica que falta darle un valor, entonces se procede a usar el método

setString() donde el parámetro nom contiene el valor o dato a reemplazar

en ?. Se ejecuta la consulta usando el método executeQuery(), cuyo resultado

se almacena en el objeto ResultSet llamado rs.

Ing. Martín Salcedo Quiñones Página 3

Page 4: Tema 10 Consulta Datos JTable Select

Universidad Católica Los Ángeles de Chimbote – Programación Visual II2. En el formulario frmPrincipal que contiene el diseño del menú, ubicamos la

opción Plan de Estudio por Escuela dentro de consultas.

Seleccionamos Plan de Estudio por Escuela damos clic botón derecho del

mouse elegimos Eventos/Action/ActionPerformed

Luego escribimos el siguiente código:

3. Diseñamos el siguiente formulario denominado frmConsPlanXEsc.

Ing. Martín Salcedo Quiñones Página 4

Page 5: Tema 10 Consulta Datos JTable Select

Universidad Católica Los Ángeles de Chimbote – Programación Visual II

cboEscuelabtnConsultartablaPlanes

btnCerrar

4. Vamos a proceder a programar el formulario frmConsPlanXEsc colocando las

siguientes líneas de código:

Importamos los paquetes java.sql (para acceder a base de datos), javax.swing

(para el uso de los controles visuales), javax.swing.table para el manejo de las

clases del paquete table y el paquete universidad que contiene a la clase

Acceso con lo cual podremos hacer uso de todos los métodos que tenga. A Ing. Martín Salcedo Quiñones Página 5

Page 6: Tema 10 Consulta Datos JTable Select

Universidad Católica Los Ángeles de Chimbote – Programación Visual IIveces es necesario ser explícitos en señalar el uso de PreparedStatement para

el funcionamiento de los parámetros en la estructura de un comando SELECT.

Se define las variables objeto conn, st, rs del tipo Connection, Statement y

ResultSet inicializando como null. La variable objeto dtm es del tipo

DefaultTableModel para el manejo del objeto Jtable tablaPlanes.

Con la variable arreglo llamado titulos de tipo String, almacenamos los títulos

de cada uno de las columnas. Con el método setColumnIdentifiers() damos

el arreglo titulos para establecer los titulos de cada columna que maneja el

modelo dtm. Con el método setmodel() vinculamos el modelo al objeto Jtable

Ing. Martín Salcedo Quiñones Página 6

Page 7: Tema 10 Consulta Datos JTable Select

Universidad Católica Los Ángeles de Chimbote – Programación Visual IItablaPlanes. En el bloque try iniciamos con establecer la conexión con la base

de datos universidad. Una vez que se tienen la conexión procedemos a

ejecutar el método EnlEsc() que se encuentra en la clase Acceso que

permitirá obtener todos las escuelas profesionales. Con el método next() se

ubica al primer registro de los resultados devueltos por el método EnlEsc(), de

ahí cada vez que usemos el método next() se desplazará al siguiente registro.

Cuando el método next() devuelva falso terminará la ejecución de la sentencia

repetitiva while. En cada desplazamiento se agregará al objeto JComboBox

denominado cboEscuela el nombre de la escuela profesional.

Se declara la variable nomesc de tipo String, f e i de tipo int. En la variable

nomesc se almacena el nombre de de la escuela profesional seleccionada del

Ing. Martín Salcedo Quiñones Página 7

Page 8: Tema 10 Consulta Datos JTable Select

Universidad Católica Los Ángeles de Chimbote – Programación Visual IIobjeto JComboBox denominado cboEscuela. El método getSelectedItem() obtiene el nombre de la escuela elegida pero lo extrae de tipo Object y al

anteponerle la expresión (String) se comporta como dato de tipo String y lo

asigna a la variable nomesc. En el bloque try establecemos la conexión con la

base de datos universidad y ejecutamos el método BuscaPlanesEscuela()

perteneciente a la clase Acceso que devolverá los datos de los planes de

estudio perteneciente a la escuela seleccionada. Se declara e instancia un

arreglo denominado datos[] que permitirá guardar los datos de un plan de

estudio encontrado en la variable rs, pero antes nos aseguramos que no

exista fila alguna en el objeto JTable tablaPlanes. La sentencia repetitiva

while y usando el método next() del objeto rs es para ubicarnos en la primera

fila y en las siguientes filas de los resultados devueltos por el método

BuscaPlanesEscuela(). En cada interacción se agregará una fila en el objeto

tablaPlanes a través del modelo dtm usando el método addRow().

El botón de comando btnCerrar, con el método dispose se cierra la ventana o

formulario.

5. Procedemos a ejecutar el formulario desde el menú.

Seleccionamos la escuela de Ingeniería Civil y al dar clic en el botón de

comando Consultar se muestra:

Ing. Martín Salcedo Quiñones Página 8

Page 9: Tema 10 Consulta Datos JTable Select

Universidad Católica Los Ángeles de Chimbote – Programación Visual II

Usando PreparedStatement con otros comandos

Cuando trabajamos con una base de datos es posible que haya sentencias SQL

que tengamos que ejecutar varias veces durante la sesión, aunque sea con

distintos parámetros. Por ejemplo, durante una sesión con base de datos podemos

querer insertar varios registros en una tabla. Cada vez los datos que insertamos

serán distintos, pero la sentencia SQL será la misma: Un INSERT sobre

determinada tabla que será siempre igual, salvo los valores concretos que

queramos insertar.

Casi todas las bases de datos tienen previsto un mecanismo para que en estos

casos la ejecución de esas sentencias repetidas sea más rápida. Si tenemos una

Ing. Martín Salcedo Quiñones Página 9

Page 10: Tema 10 Consulta Datos JTable Select

Universidad Católica Los Ángeles de Chimbote – Programación Visual IItabla person con un id, una edad, un nombre, un apellido y hacemos, por ejemplo,

varios INSERT así

mysql> INSERT INTO person VALUES (null, 23, 'Pedro', 'Perez');

mysql> INSERT INTO person VALUES (null, 33, 'Rodrigo', 'Rodriquez');

en cada caso la base de datos deberá analizar la sentencia SQL, comprobar que

es correcta, convertir los datos al tipo adecuado (por ejemplo, los enteros a int) y

ejecutar la sentencia.

El mecanismo que preven las bases de datos para hacer más eficiente este

proceso es que le indiquemos, previamente, el tipo de sentencia que vamos a

usar, de forma que la base de datos la "precompila" y la guarda en condiciones de

ser ejecutada inmediatamente, sin necesidad de analizarla en cada caso. Esto es

lo que se conoce como una prepared statement. En el caso de mysql, se haría de

esta forma

mysql> PREPARE insertar FROM "INSERT INTO person VALUES (null, ?, ?, ?)";

mysql> SET @edad=23;

mysql> SET @nombre='Pedro';

mysql> SET @apellido='Perez';

mysql> EXECUTE insertar USING @edad,@nombre,@apellido

mysql> SET @edad=33;

mysql> SET @nombre='Rodrigo';

mysql> SET @apellido='Rodriguez';

mysql> EXECUTE insertar USING @edad,@nombre,@apellido;

mysql> DEALLOCATE PREPARE insertar;

donde hemos preparado una prepared statement de nombre insertar con la SQL

del INSERT, en la que hemos reemplazado los valores concretos por

interrogantes. Fíjate que no hemos puesto comillas entre los interrogantes. Hemos

hecho dos inserciones dando valores a unas variables @edad, @nombre y

@apellido, que son las que se usarán en el EXCECUTE de la prepared statement.

Una vez finalizadas las inserciones, avisamos a la base de datos que no vamos a

usar más esta prepared statement con un DEALLOCATE.

Ing. Martín Salcedo Quiñones Página 10