Formación informática

Java | Joomla | MySQL

Curso de Java - Tema 32.4.4: realización de consultas para actualizar datos

Arco romano en Medinaceli

Otra operación muy habitual que tenemos que realizar cuando estamos trabajando con bases de datos es la actualización de los datos bien por haberlos introducido mal bien por haber variado los datos guardados.

Instrucción SQL

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

 
  UPDATE 
  [LOW_PRIORITY] [IGNORE] table_reference SET assignment_list 
  [WHERE where_condition] 
  [ORDER BY ...] 
  [LIMIT row_count] value: {expr | DEFAULT} 
  assignment: col_name = value assignment_list: assignment [, assignment] ... 
  

Tras leer esta instrucción observamos que es más sencilla que la de selección. Sin embargo esconde un reverso oscuro debido a que con esta instrucción se realiza la modificación de los datos guardados en la base de datos. Por lo tanto, tenemos que estar completamente seguros de que la sintaxis es correcta y que hemos introducido las condiciones necesarias para actualizar los registros que queremos. En caso contrario podemos llegar a perder la coherencia de los datos. Debido a esto, antes de realizar una actualizació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 la actualización de datos. 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 no devuelve nada con un parámetro en el que usaremos:

 Así en la clase ManejadorBaseDatos escribiremos un método que no devuelve nada con un parámetro 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 actualización de datos.
  3. Una variable del tipo adecuado para contener la información que vamos a actualizar. Es decir, un variable Integer para número enteros, una variable String para texto…
  4. 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.
  5. 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

Cómo ejemplo práctico vamos a actualizar el valor de la “nueva” Comunidad que hemos introducido con la consulta de inserción 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.ResultSet;
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 void actualizarComunidad() {
        /* 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 para 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 del tipo adecuado para realizar el filtrado de datos*/
                String codigo = "";
                /*Y otra para almacenar el nuevo valor del registro*/
                String actualizacion = "";
                /* Creamos la consulta sql en una variable de tipo String*/
                String sql = "UPDATE comunidad SET comunidad = ? WHERE codigo_comunidad='20'";
                /* Creamos la conexión para lanzar la consulta*/
                consulta = conexion.prepareStatement(sql);
                /* Usamos dos variables para guardar los datos introducidos por el usuario*/
                System.out.println("Introduza el código de la Comunidad Autónoma a actualizar");
                codigo = teclado.nextLine();
                System.out.println("Introduza el nuevo valor del registro");
                actualizacion = teclado.nextLine();
                /* Ejecutamos la consulta preparada con los datos introducidos por el usuario*/
                consulta.setString(1, actualizacion);
                consulta.execute();
            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
            } 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");
        }
    }
}
  

Mientras que en el método Main de clase Main utilizaremos los métodos de la clase ManejadorBaseDatos para realizar la actualización de los datos y mostrar el resultado:

 
  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étodo que hemos creado en la clase Manejador tanto para actualizar*/
        mbd.actualizarComunidad();
        /* Cómo para mostrar los datos actualizados*/
        mbd.listadoComunidades();
    }    
}
  

Curso de Java - Tema 32.4.3: consultas para insertar datos | Curso de Java - Tema 32.4.5: consultas para borrar datos
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