Formación informática

Java | Joomla | MySQL

Curso de Java - Tema 32.4.5: realización de consultas para borrar datos

Vista panorámica de la Plaza Mayor de Pedraza

Otra operación muy habitual que tenemos que realizar cuando estamos trabajando con bases de datos es la eliminación o borrado de los datos guardados en una tabla de la base de datos por el motivo que sea.

Instrucción SQL

En este caso, la instrucción SQL que tenemos que usar es DELETE cuya sintaxis genérica sacada del manual SQL de la versión 5.7 de MySQL es:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

Tras leer esta instrucción observamos que es más sencilla que la de selección. Sin embargo, debido a que con esta instrucción estamos eliminando los datos guardados en la base de datos tenemos que estar completamente seguros de que la sintaxis es correcta y que hemos introducido las condiciones necesarias para borrar los registros que queremos. En caso contrario podemos llegar a perder datos de vital importancia. Debido a esto, antes de realizar una eliminación de datos, para mí, es obligatorio realizar una copia de seguridad de la base de datos que nos permita restaurarla al estado anterior a realizar tan delicada operación. Pero esto entra dentro del ámbito de la administración de bases de datos y no se verá aquí.

Proceso

El proceso para realizar este tipo de consultas hace uso del método conector que hemos creado, varias variables para almacenar datos de forma temporal y la interface PreparedStatement. Así en la clase ManejadorBaseDatos escribiremos un método que devuelve un booleano  (puesto que nos interesa solo el resultado no el valor) con uno o varios parámetros (o una variable local) en el que usaremos:

  1. El método conector que hemos creado anteriormente para realizar la conexión con la base de datos.
  2. Una variable de tipo String para almacenar la consulta SQL de borrado de datos.
  3. Una variable del tipo adecuado para contener la información que vamos a borrar. Es decir, un variable Integer para número enteros, una variable String para texto… Coincide con el campo de la base de datos cuyo valor vamos a utilizar para realizar el filtrado de los datos.
  4. La clase Scanner para recuperar lo que el usuario escribe mediante el teclado e introducirlo en las variables temporales.
  5. La interface PreparedStatament para ejecutar la consulta y obtener el valor devuelto por la base de datos. Usaremos el método execute para ejecutar la consulta almacenada en la variable y que nos devuelva un objeto.
  6. Por último, no hay que olvidarse de liberar los recursos usados cerrando todos los objetos que hemos usado durante el proceso. Lo ideal es hacerlo en un bloque finally para asegurarse de que se cierran los objetos.

Para mostrar los datos por línea de comandos usaremos en el método Main de la clase Main el método que acabamos de crear junto con el que mostraba la consulta de selección sin filtros sobre la tabla cuyo dato o datos vamos a borrar; por lo tanto necesitaremos instanciar los mismos objetos que hemos usado en el método para mostrar la consulta: JavaBean, HashMap…. Y realizar los procesos necesarios para mostrar el resultado.

Cómo ejemplo práctico vamos a borrar el valor de la “nueva” Comunidad que hemos introducido con la consulta de inserción y actualizado anteriormente. Para ello en la clase ManejadorBaseDatos tenemos que escribir el método siguiente, sabiendo que el código de la nueva Comunidad Autónoma es 20:

package dao;

import beans.Comunidad;
import beans.Municipio;
import beans.Provincia;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Clase que controla la conexión y consultas sobre la base de datos MySQL
 *
 * @author José María Torres Corral
 */
public class ManejadorBaseDatos {

    public Connection conector() {
        //Objeto para realizar la conexión que inicializamos nula
        Connection conexion = null;
        //Variables para almacenar los datos de la conexión y la base de datos usada
        final String controlador = "com.mysql.jdbc.Driver";
        final String urlBd = "jdbc:mysql://localhost:3306/ine_municipios_esp?zeroDateTimeBehavior=convertToNull";
        final String nombreBd = "INE Municipios España";
        final String usuario = "root";
        final String contrasena = "Admin";

        try {
            //Objeto para cargar el controlador
            Class.forName(controlador);
            //Realizamos la conexión a la base de datos usando el método getConnection de la clase DriverManager
            conexion = DriverManager.getConnection(urlBd, usuario, contrasena);
        } catch (ClassNotFoundException ex) {
            System.out.println(ex.getMessage());
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return conexion;
    }

    public ArrayList listadoComunidades() {
        /* Instanciamos un ArrayList que guardará objetos de la clase Comunidad*/
        ArrayList comunidadesAlfabetico = new ArrayList>();
        /* Realizamos la conexión con la base de datos usando el método conector*/
        Connection conexion = conector();
        /* Comprobamos si existe la condición para realizar el tratamiento adecuado*/
        if (conexion != null) {
            try {
                /* Creamos la conexión para lanzar la consulta*/
                Statement consulta = conexion.createStatement();
                /* Creamos la consulta sql en una variable de tipo String*/
                String sql = "select * from comunidad";
                /* Ejecutamos la consulta y recuperamos los datos*/
                ResultSet resultado = consulta.executeQuery(sql);
                while (resultado.next()) {
                    /* Guardamos en una variable temporal los resultados*/
                    String codigoComunidad = resultado.getString("codigo_comunidad");
                    String comunidad = resultado.getString("comunidad");
                    /* Instanciamos un objeto de tipo Comunidad con los datos devueltos por la base de datos*/
                    Comunidad c = new Comunidad(codigoComunidad, comunidad);
                    /*Guardamos los datos del objeto en el ArrayList */
                    comunidadesAlfabetico.add(c);
                }
                /*Para liberar recursos cerramos los objetos*/
                resultado.close();
                consulta.close();
                conexion.close();

            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
            }
        } else {
            System.out.println("Conexión no disponible. Compruebe los datos");
        }
        return comunidadesAlfabetico;
    }

    public boolean eliminarComunidad() {
        /* Instanciamos un objeto de tipo Scanner para detectar la entrada de datos por línea de comandos*/
        Scanner teclado = new Scanner(System.in);
        /* Realizamos la conexión con la base de datos usando el método conector*/
        Connection conexion = conector();
        /*Instanciamos objeto PreparedStatement para poder realizar tratamiento en bloque finally*/
        PreparedStatement consulta = null;
        /* Comprobamos si existe la condición para realizar el tratamiento adecuado*/
        if (conexion != null) {
            try {
                /*Creamos una variable para almacenar el dato a borrar*/
                Integer codigo = null;
                /*Pedimos al usuario que introduzca el código a cambiar y lo guardamos en la variable*/
                System.out.println("Introduzca el código de la Comunidad Autónoma que desea borrar");
                codigo = teclado.nextInt();
                /* Creamos la consulta sql en una variable de tipo String*/
                String sql = "DELETE FROM comunidad WHERE codigo_comunidad=?";
                /* Creamos la conexión para lanzar la consulta*/
                consulta = conexion.prepareStatement(sql);
                /* Ejecutamos la consulta y recuperamos los datos*/
                consulta.setInt(1, codigo);
                consulta.execute();
            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
                return false;
            } finally {
                try {
                    /*Para liberar recursos cerramos los objetos*/
                    if (consulta != null) {
                        consulta.close();
                    }
                    /*No preguntamos por la existencia del objeto puesto que ya lo hemos hecho*/
                    conexion.close();
                } catch (SQLException ex) {
                    System.out.println(ex.getMessage());
                }
            }
        } else {
            System.out.println("Conexión no disponible. Compruebe los datos");
        }
        return true;
    }
}

Mientras que en el método Main de la clase Main tenemos que usar un objeto de tipo colección para almacenar el valor devuelto por el método que devuelve el listado de Comunidades:

package principal;

import beans.Comunidad;
import beans.Provincia;
import dao.ManejadorBaseDatos;
import java.util.ArrayList;

/**
 * Clase principal que ejecuta la aplicación
 * 
 * @author jugarenequipo
 */
public class Main {
    
    public static void main(String[] args) {
        
        /* Instanciamos un objeto de la clase Manejador Base de datos para acceder a sus métodos*/
        ManejadorBaseDatos mbd = new ManejadorBaseDatos();
        /* Instanciamos un ArrayList que almacenará los datos de la tabla Comunidad*/
        ArrayList  comunidadAlfabetico = mbd.listadoComunidades();
        /* Mostramos por pantalla el contenido de la tabla*/
        System.out.println("--- Listado de Comunidades Autónomas de España ---");
        if (comunidadAlfabetico.size() > 0 && comunidadAlfabetico !=null) {
            for (Comunidad comunidad : comunidadAlfabetico) {
                System.out.println(comunidad.toString());
            }
        }else  {
            System.out.println("La base de datos no ha devuelto datos");
        }

        /* Usamos los métodos que hemos creado en la clase Manejador tanto para borrar*/
        mbd.eliminarComunidad();
        /* Cómo para mostrar los datos actualizados*/
        mbd.listadoComunidades();
    }    
}      
Curso de Java - Tema 32.4.4: consultas para actualizar datos | Siguiente
Curso de Java - Índice Ejercicios Nivel Medio

Escribir un comentario

Aunque los comentarios no expresan la opinión del administrador del sitio web, éste si que tiene una responsabilidad legal sobre lo que aparece. Por lo tanto, habrá una labor de moderación de los mensajes. No se permitirán mensajes ofensivos ni publicidad


Código de seguridad
Refescar

Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-Ley 13/2012, de 30 de marzo. Si continúa navegando consideramos que acepta el uso de cookies. . Más información