En el post
anterior se vio como se podían ejecutar consultas SQL de acción del tipo INSERT
INTO (para insertar registros en las tablas de la base de datos).
En esta publicación
se practicará con otras consultas SQL de acción. Concretamente con las del tipo
DELETE (usadas para eliminar registros de las tablas de la base de datos).
Al igual que
ocurre con las consultas INSERT INTO, las consultas DELETE se ejecutan usando
el método executeUpdate del
objeto sentencia.
sentencia.executeUpdate(“DELETE …”);
Al ejecutar
estas consultas se cambiará el contenido de las tablas de la base de datos y no
se devolverá ningún ResultSet.
EJERCICIO GUIADO Nº 1
PLANTEAMIENTO:
Se mejorará el
proyecto realizado en el post anterior de forma que no solo admita la inserción
de nuevos trabajadores en la tabla Trabajadores
de la base de datos AMANUVA, sino que también permita eliminar a trabajadores
de la tabla.
- Ejecuta el IDE NetBeans. Abre el proyecto
llamado MantenimientoTrabajadores que se programó en
la entrada anterior.
- Añade en la parte inferior de la ventana un
nuevo panel:
- La mejora que se pretende hacer es la
siguiente:
-
El usuario introducirá en el cuadro de texto txtDniEliminar el DNI del
trabajador que quiere eliminar.
-
Al pulsar el botón Eliminar el trabajador con dicho DNI se eliminará de la
tabla.
-
Antes de eliminar al trabajador, se le pedirá al
usuario una confirmación, para evitar un borrado accidental.
-
Si el DNI introducido no se correspondiera con
ningún trabajador de la tabla, entonces se mostrará un mensaje indicándolo.
- Para hacer esto, entre en el actionPerformed del botón Eliminar y programe lo
siguiente:
Se va a
analizar este código. Estúdielo con detenimiento:
Lo primero
interesante que encontrará es la construcción de una consulta de selección
(SELECT) usando la típica concatenación de cadenas:
consulta = "SELECT * FROM Trabajadores WHERE dni = '" +
txtDniEliminar.getText() + "'";
ResultSet rs = sentencia.executeQuery(consulta);
Esto se hace
para extraer aquellos trabajadores que tengan el DNI introducido en el cuadro
de texto txtDniEliminar. La
idea es saber si existe en la tabla algún trabajador con dicho DNI. Al ejecutar
esta consulta, el ResultSet rs se llenará con trabajadores que
tengan ese DNI.
Observe el
código que viene a continuación:
if (!rs.first()) {
Este if
significa: “si no puedo colocarme en el primer elemento del ResultSet rs”.
Si no es posible
colocarse en el primer elemento del resultado de la consulta será porque no hay
un primer elemento, o dicho de otra forma, porque el ResultSet está vacío, o dicho de otra forma más,
porque no se encontró a nadie que tuviera el DNI indicado.
Si esto fuera
así, no existe un trabajador con dicho DNI y por tanto no puede ser borrado.
Así pues se muestra un mensaje con un JOptionPane indicando dicha
circunstancia.
En caso
contrario, existe ese trabajador y por tanto podemos borrarlo. Observa el
contenido del else:
respuesta = JOptionPane.showConfirmDialog(null, "¿Confirma el
Borrado?", "Aviso", JOptionPane.YES_NO_OPTION);
if (respuesta == JOptionPane.YES_OPTION) {
En estas líneas de
código primero pregunta al usuario si quiere borrar realmente al trabajador;
luego si la respuesta es sí (YES_OPTION) se efectuará el borrado tal como se
indica a continuación:
consulta = "DELETE FROM Trabajadores WHERE dni = '" +
txtDniEliminar.getText() + "'";
sentencia.executeUpdate(consulta);
mostrarTodosLosTrabajadores();
Como puedes
observar, se construye a través de una concatenación, una consulta de acción
SQL del tipo DELETE, que nos permitirá borrar el trabajador con el DNI
introducido.
Luego se ejecuta
dicha instrucción usando el método executeUpdate
del objeto sentencia (recuerde que usará siempre executeUpdate para ejecutar consultas de acción: altas,
eliminación y modificación).
Finalmente se
llama de nuevo al método que creamos en la publicación anterior que muestra
todo el contenido de la tabla Trabajadores, y de esta forma
podremos comprobar el borrado del trabajador.
En caso de que
el usuario no haya confirmado el borrado, el código muestra un mensaje “Borrado
Cancelado por el Usuario.”.
Por otro lado,
todo este código es susceptible de sufrir errores inesperados, por lo que está
rodeado por un try ... catch.
- Ejecuta el programa y prueba a eliminar
trabajadores de la tabla. Se recomienda que pruebes a introducir DNIs
inexistentes, para ver que ocurre. Pruebe también la confirmación del
borrado: responda a veces que sí y otras veces que no.
CONCLUSIONES:
Se pueden ejecutar instrucciones SQL del tipo
DELETE (borrar registros) usando el objeto sentencia.
Para este tipo de instrucciones hay que usar el
método executeUpdate.
Normalmente, será necesario construir una cadena de
consulta DELETE a través de la concatenación de subcadenas y datos introducidos
por el usuario en cuadros de texto.
Este tipo de instrucciones SQL no devuelven ningún ResultSet,
ya que no extraen datos de las tablas, sino que modifican el contenido de
éstas.
Para realizar borrados será necesario habitualmente
el comprobar que los registros a borrar existen en la tabla. Esto se hará
ejecutando una consulta SELECT y comprobando si el ResultSet resultante
contiene algún registro, usando el método first.
También se recomienda pedir confirmación al usuario
antes de realizar borrados en las tablas.
Hola, muchas gracias por tus aportes en este tema, han sido de mucha ayuda. :D
ResponderBorrarTengo un problema, y espero que me puedas ayudar.
cuando quiero eliminar a un cliente no me aparece ni el cuadro confirmación en e caso de que cliente exista, ni el mensaje de que no existe algún cliente con el ID indicado. Al correr el programa, y pulsar el botón que elimina me aparece un cuadro de dialogo que dice "java.sql.SQLException: Operación no válida para el juego de resultados de solo reenvio: first."
Gracias de antemano.
Mucho éxito!!
Hola Dani:
ResponderBorrarHaz probado que tu conexión a tu base de datos esté correcta.
Si es así tendrías que mostrarme el código que haz programado para revisarlo.