You are on page 1of 10

Universidad Catlica Los ngeles de Chimbote Programacin Visual II

OBJETO JTABLE Y COMANDO SELECT EN CONSULTA DE DATOS

Comando SELECT y sus clasulas La sentencia SELECT es usada para obtener la informacin guardada en una tabla. La forma general de esta sentencia es: SELECT LaInformacinQueDeseamos FROM DeQueTabla WHERE CondicinASatisfacer

Aqu, LaInformacinQueDeseamos es la informacin 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. Martn Salcedo Quiones

Pgina 1

Universidad Catlica Los ngeles de Chimbote Programacin Visual II


clasula WHERE es opcional. Si est presente, la CondicinASatisfacer especifica las condiciones que los registros deben satisfacer para que puedan ser mostrados. Podemos seleccionar slo registros particulares de una tabla. Por ejemplo, si deseamos visualizar las escuelas profesionales de la facultad de ingeniera: Select e.nombre from escuela e, facultad f where e.idfacultad=f.idfacultad And f.nombre=Ingenieria; Podemos tambin combinar condiciones, por ejemplo, visualizar los planes de estudio del primer ciclo, perteneciente a la escuela profesional de Ingeniera de Sistema: Select 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 and ciclo=1; Se debe notar en los ejemplos anteriores que las filas regresadas son mostradas sin ningn orden en particular. Sin embargo, frecuentemente es ms fcil examinar la salida de una consulta cuando las filas son ordenadas en alguna forma til. Para ordenar los resultados, tenemos que usar una clusula ORDER BY. Select e.nombre from escuela e, facultad f where e.idfacultad=f.idfacultad And f.nombre=Ingenieria order by e.nombre; Podemos ordenar mltiples columnas. Por ejemplo, para ordenar por ciclo de los planes de estudio y por el nmero de crditos, 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 ejecucin devolver los resultados a un objeto ResultSet.
Ing. Martn Salcedo Quiones Pgina 2

Universidad Catlica Los ngeles de Chimbote Programacin Visual II


Seguimos 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 disear y desarrollar la aplicacin seguiremos los siguientes pasos: 1. En la clase Acceso agregamos el siguiente mtodo BuscaPlanesEscuela:

El mtodo BuscaPlanesEscuela se inicia invocando al mtodo sta() que a su vez utiliza el mtodo Enlace(), este ltimo establece la conexin con la base de datos, por lo tanto el objeto conn deja de ser null y contiene la informacin necesaria de la conexin 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 mtodo setString() donde el parmetro nom contiene el valor o dato a reemplazar en ?. Se ejecuta la consulta usando el mtodo executeQuery(), cuyo resultado se almacena en el objeto ResultSet llamado rs.

Ing. Martn Salcedo Quiones

Pgina 3

Universidad Catlica Los ngeles de Chimbote Programacin Visual II


2. En el formulario frmPrincipal que contiene el diseo del men, ubicamos la opcin Plan de Estudio por Escuela dentro de consultas.

Seleccionamos Plan de Estudio por Escuela damos clic botn derecho del mouse elegimos Eventos/Action/ActionPerformed

Luego escribimos el siguiente cdigo:

3. Diseamos el siguiente formulario denominado frmConsPlanXEsc.

Ing. Martn Salcedo Quiones

Pgina 4

Universidad Catlica Los ngeles de Chimbote Programacin Visual II

cboEscuela btnConsultar tablaPlanes btnCerrar 4. Vamos a proceder a programar el formulario frmConsPlanXEsc colocando las siguientes lneas de cdigo:

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 mtodos que tenga. A
Ing. Martn Salcedo Quiones Pgina 5

Universidad Catlica Los ngeles de Chimbote Programacin Visual II


veces es necesario ser explcitos en sealar el uso de PreparedStatement para el funcionamiento de los parmetros 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 ttulos de cada uno de las columnas. Con el mtodo setColumnIdentifiers() damos el arreglo titulos para establecer los titulos de cada columna que maneja el modelo dtm. Con el mtodo setmodel() vinculamos el modelo al objeto Jtable
Ing. Martn Salcedo Quiones Pgina 6

Universidad Catlica Los ngeles de Chimbote Programacin Visual II


tablaPlanes. En el bloque try iniciamos con establecer la conexin con la base de datos universidad. Una vez que se tienen la conexin procedemos a ejecutar el mtodo EnlEsc() que se encuentra en la clase Acceso que permitir obtener todos las escuelas profesionales. Con el mtodo next() se ubica al primer registro de los resultados devueltos por el mtodo EnlEsc(), de ah cada vez que usemos el mtodo next() se desplazar al siguiente registro. Cuando el mtodo next() devuelva falso terminar la ejecucin 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. Martn Salcedo Quiones Pgina 7

Universidad Catlica Los ngeles de Chimbote Programacin Visual II


objeto JComboBox denominado cboEscuela. El mtodo getSelectedItem() obtiene el nombre de la escuela elegida pero lo extrae de tipo Object y al anteponerle la expresin (String) se comporta como dato de tipo String y lo asigna a la variable nomesc. En el bloque try establecemos la conexin con la base de datos universidad y ejecutamos el mtodo 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 mtodo next() del objeto rs es para ubicarnos en la primera fila y en las siguientes filas de los resultados devueltos por el mtodo BuscaPlanesEscuela(). En cada interaccin se agregar una fila en el objeto tablaPlanes a travs del modelo dtm usando el mtodo addRow().

El botn de comando btnCerrar, con el mtodo dispose se cierra la ventana o formulario. 5. Procedemos a ejecutar el formulario desde el men.

Seleccionamos la escuela de Ingeniera Civil y al dar clic en el botn de comando Consultar se muestra:

Ing. Martn Salcedo Quiones

Pgina 8

Universidad Catlica Los ngeles de Chimbote Programacin 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 sesin, aunque sea con distintos parmetros. Por ejemplo, durante una sesin con base de datos podemos querer insertar varios registros en una tabla. Cada vez los datos que insertamos sern 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 ejecucin de esas sentencias repetidas sea ms rpida. Si tenemos una

Ing. Martn Salcedo Quiones

Pgina 9

Universidad Catlica Los ngeles de Chimbote Programacin Visual II


tabla 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 ms 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 hara 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. Fjate 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 usarn en el EXCECUTE de la prepared statement. Una vez finalizadas las inserciones, avisamos a la base de datos que no vamos a usar ms esta prepared statement con un DEALLOCATE.

Ing. Martn Salcedo Quiones

Pgina 10

You might also like