martes, 6 de septiembre de 2016

048.- Base De Datos - BAJAS - Java Y NetBeans

Consultas de Acción (Bajas):

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.


  1. Ejecuta el IDE NetBeans. Abre el proyecto llamado MantenimientoTrabajadores que se programó en la entrada anterior.

  1. Añade en la parte inferior de la ventana un nuevo panel:



  1. 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.



  1. 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.


  1. 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.

2 comentarios:

  1. Hola, muchas gracias por tus aportes en este tema, han sido de mucha ayuda. :D
    Tengo 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!!

    ResponderBorrar
  2. Hola Dani:
    Haz 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.

    ResponderBorrar