Click here to load reader
Upload
miguelitosoporte
View
42
Download
4
Embed Size (px)
Citation preview
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
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
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
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
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
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
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
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
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
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