- Baja y modificación de datos de una tabla de MySQL


Problema 1

Ya creamos anteriormente una base de datos llamada bd1 y en la misma creamos una tabla llamada articulos.

Procederemos a implementar en Java un programa que nos permita comunicarnos con la base de datos "bd1" y consultar, borrar y modificar filas en la tabla "articulos".

1 - Creamos desde Eclipse un proyecto llamado "basededatos02" y seguidamente con el WindowBuilder creamos una clase llamada "Formulario".

2 - Primero debemos añadir el driver que descargamos (mysql-connector-java-5.1.18-bin.jar) presionamos el botón derecho del mouse sobre nuestro proyecto y seleccionamos la opción "Properties", aparece el siguiente diálogo:

properties eclipse

Seleccionamos la opción "Java Build Path", de la parte central seleccionamos la pestaña "Libraries" y procedemos a presionar el botón "Add External JARs...", donde procedemos a buscar el archivo mysql-connector-java-5.1.18-bin.jar

El código fuente completo que resuelve este problema es:


import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class Formulario extends JFrame {

  private JPanel contentPane;
  private JTextField tf1;
  private JTextField tf2;
  private JLabel labelResultado;
  private JButton btnConsultaPorCdigo;
  private JTextField tf3;

  /**
   * Launch the application.
   */
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      public void run() {
        try {
          Formulario frame = new Formulario();
          frame.setVisible(true);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }

  /**
   * Create the frame.
   */
  public Formulario() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 606, 405);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);
    
    JLabel lblDescripcinDelArtculo = new JLabel("Descripción del artículo:");
    lblDescripcinDelArtculo.setBounds(23, 38, 193, 14);
    contentPane.add(lblDescripcinDelArtculo);
    
    tf1 = new JTextField();
    tf1.setBounds(247, 35, 193, 20);
    contentPane.add(tf1);
    tf1.setColumns(10);
    
    JLabel lblPrecio = new JLabel("Precio:");
    lblPrecio.setBounds(23, 74, 95, 14);
    contentPane.add(lblPrecio);
    
    tf2 = new JTextField();
    tf2.setBounds(247, 71, 107, 20);
    contentPane.add(tf2);
    tf2.setColumns(10);
    
    labelResultado = new JLabel("resultado");
    labelResultado.setBounds(361, 122, 229, 14);
    contentPane.add(labelResultado);
    
    btnConsultaPorCdigo = new JButton("Consulta por código");
    btnConsultaPorCdigo.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
        labelResultado.setText("");
        tf1.setText("");
        tf2.setText("");        
        try {
          Connection conexion=DriverManager.getConnection("jdbc:mysql://localhost/bd1","root" ,"");
          Statement comando=conexion.createStatement();
          ResultSet registro = comando.executeQuery("select descripcion,precio from articulos where codigo="+tf3.getText());
          if (registro.next()==true) {
            tf1.setText(registro.getString("descripcion"));
            tf2.setText(registro.getString("precio"));
          } else {
            labelResultado.setText("No existe un artículo con dicho código");
          }
          conexion.close();
        } catch(SQLException ex){
          setTitle(ex.toString());
        }
      }
    });
    btnConsultaPorCdigo.setBounds(25, 122, 177, 23);
    contentPane.add(btnConsultaPorCdigo);
    
    tf3 = new JTextField();
    tf3.setBounds(247, 123, 86, 20);
    contentPane.add(tf3);
    tf3.setColumns(10);
    
    JButton btnNewButton = new JButton("Borrar");
    btnNewButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
        labelResultado.setText("");
        try {
          Connection conexion=DriverManager.getConnection("jdbc:mysql://localhost/bd1","root" ,"");
          Statement comando=conexion.createStatement();
          int cantidad = comando.executeUpdate("delete from articulos where codigo="+tf3.getText());
          if (cantidad==1) {
            tf1.setText("");
            tf2.setText("");        
            labelResultado.setText("Se borro el artículo con dicho código");
          } else {
            labelResultado.setText("No existe un artículo con dicho código");
          }
          conexion.close();
        } catch(SQLException ex){
          setTitle(ex.toString());
        }        
      }
    });
    btnNewButton.setBounds(24, 156, 177, 23);
    contentPane.add(btnNewButton);
    
    JButton btnNewButton_1 = new JButton("Modificar");
    btnNewButton_1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        labelResultado.setText("");
        try {
          Connection conexion=DriverManager.getConnection("jdbc:mysql://localhost/bd1","root" ,"");
          Statement comando=conexion.createStatement();
          int cantidad = comando.executeUpdate("update articulos set descripcion='" + tf1.getText() + "'," +
                                           "precio=" + tf2.getText() + " where codigo="+tf3.getText());
          if (cantidad==1) {
            labelResultado.setText("Se modifico la descripcion y el precio del artículo con dicho código");
          } else {
            labelResultado.setText("No existe un artículo con dicho código");
          }
          conexion.close();
        } catch(SQLException ex){
          setTitle(ex.toString());
        }                
      }
    });
    btnNewButton_1.setBounds(21, 190, 179, 23);
    contentPane.add(btnNewButton_1);
    cargarDriver();
  }
  
  private void cargarDriver() {
    try {
      Class.forName("com.mysql.jdbc.Driver");
    }catch(Exception ex) {
      setTitle(ex.toString());
    }
  }
}

El código a implementar cuando se presiona el botón "Consulta por código" es el visto en el concepto anterior:

		btnConsultaPorCdigo = new JButton("Consulta por código");
		btnConsultaPorCdigo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				labelResultado.setText("");
				tf1.setText("");
				tf2.setText("");				
				try {
					Connection conexion=DriverManager.getConnection("jdbc:mysql://localhost/bd1","root" ,"");
					Statement comando=conexion.createStatement();
					ResultSet registro = comando.executeQuery("select descripcion,precio from articulos where codigo="+tf3.getText());
					if (registro.next()==true) {
						tf1.setText(registro.getString("descripcion"));
						tf2.setText(registro.getString("precio"));
					} else {
						labelResultado.setText("No existe un artículo con dicho código");
					}
					conexion.close();
				} catch(SQLException ex){
					setTitle(ex.toString());
				}
			}
		});

Veamos el código para efectuar una baja en la tabla articulos:


    btnNewButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
        labelResultado.setText("");
        try {
          Connection conexion=DriverManager.getConnection("jdbc:mysql://localhost/bd1","root" ,"");
          Statement comando=conexion.createStatement();
          int cantidad = comando.executeUpdate("delete from articulos where codigo="+tf3.getText());
          if (cantidad==1) {
            tf1.setText("");
            tf2.setText("");        
            labelResultado.setText("Se borro el artículo con dicho código");
          } else {
            labelResultado.setText("No existe un artículo con dicho código");
          }
          conexion.close();
        } catch(SQLException ex){
          setTitle(ex.toString());
        }        
      }
    });

Luego de crear un objeto de la clase Statement procedemos a llamar al método executeUpdate con un comando SQL válido (delete from articulos where codigo= código de artículo) El código de artículo lo extraemos del tercer JTextField.
El método executeUpdate retorna un entero que representa la cantidad de registros borrados de la tabla articulos. Luego en caso que retorne un uno procedemos a mostrar en un JLabel el mensaje "Se borro el artículo con dicho código", en caso contrario mostramos el mensaje "No existe un artículo con dicho código".

Para la modificación procedemos de forma muy similar al borrado:


    btnNewButton_1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        labelResultado.setText("");
        try {
          Connection conexion=DriverManager.getConnection("jdbc:mysql://localhost/bd1","root" ,"");
          Statement comando=conexion.createStatement();
          int cantidad = comando.executeUpdate("update articulos set descripcion='" + tf1.getText() + "'," +
                                           "precio=" + tf2.getText() + " where codigo="+tf3.getText());
          if (cantidad==1) {
            labelResultado.setText("Se modifico la descripcion y el precio del artículo con dicho código");
          } else {
            labelResultado.setText("No existe un artículo con dicho código");
          }
          conexion.close();
        } catch(SQLException ex){
          setTitle(ex.toString());
        }                
      }
    });

Al método executeUpdate le pasamos un comando SQL de tipo update. Debemos concatenar los datos fijos del comando update con los valores que extraemos de los JTextField:

          int cantidad = comando.executeUpdate("update articulos set descripcion='" + tf1.getText() + "'," +
                                           "precio=" + tf2.getText() + " where codigo="+tf3.getText());

Es importante notar las comillas simples luego del caracter =, esto debido a que se trata de un campo de tipo varchar.

Nuevamente el método executeUpdate retorna la cantidad de registros modificados. En caso que retorne un 1 significa que se modificaron los datos correctamente.

Este proyecto lo puede descargar en un zip desde este enlace: basededatos02.zip


Retornar