Para tutorías y/o asesorías virtuales sobre JAVA SE y/o MySQL, escríbeme al formulario de contacto.


BUSCA MÁS CONTENIDO AQUÍ:



Curso de JAVA: Cómo hago el botón Modificar?




Si hay algo que debemos tener en cuenta, es que la información, al igual que la mayoría de las cosas en la vida, está sujeta a cambios y/o modificaciones.
Cuando desarrollamos un programa (software), somos conscientes de que este no sólo debe guardar y consultar información en una base de datos, sino que además de esto, hay que brindarle la posibilidad al usuario de nuestra aplicación, de poder cambiar y/o actualizar los datos previamente guardados; ya que por ejemplo, una persona registrada en el sistema, dio una dirección de domicilio, pero más adelante dicho individuo, cambia de residencia, y se hace necesaria la modificación de este dato, para mantener la integridad de la información.  
Portada del capítulo No. 17 del Curso de JAVA: Cómo hago el botón Modificar?

Explicación por Videotutorial:



Explicación por Foto-Tutorial:

1. Nos ubicaremos en nuestro paquete “Metodos”, y accederemos a la Clase “MetodosBD” o a la clase donde estés creando los métodos de tu proyecto:
Estructura de la Clase MetodosBD.java
"Clase MetodosBD.java"

2. Deberás copiar y pegar las siguientes librerías, para que el código funcione:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JOptionPane;
NOTA: Recuerda pegar dichas librerías después de la línea de código que representa el nombre del paquete (ej. package Metodos;) y sobre la línea de código que identifica el nombre de tu Clase (ej. public class MetodosBD{...).
3. Luego, copia y pega el siguiente código, dentro de las llaves de apertura “{” y de cierre “}” de la Clase “MetodosBD”:


Pool metodospool = new Pool();


public void Modificar(String nombres, String apellidos, String email, String celular, 
                      String direccion, String ciudad, String idcontacto){

int confirmar = JOptionPane.showConfirmDialog(null, "¿Desea modificar los datos actuales?");


if(confirmar == JOptionPane.YES_OPTION){

    Connection conexion = null;
    
    try {
    
        conexion = metodospool.dataSource.getConnection();
        
        String Ssql = "UPDATE contacto SET nombres=?, apellidos=?, email=?, celular=?, direccion=?, ciudad=? "
                    + "WHERE id_contacto=?";
        
        PreparedStatement prest = conexion.prepareStatement(Ssql);
        
        prest.setString(1, nombres);
        prest.setString(2, apellidos);
        prest.setString(3, email);
        prest.setString(4, celular);
        prest.setString(5, direccion);
        prest.setString(6, ciudad);
        prest.setString(7, idcontacto);
        
        if(prest.executeUpdate() > 0){
        
            JOptionPane.showMessageDialog(null, "Los datos han sido modificados con éxito", "Operación Exitosa", 
                                          JOptionPane.INFORMATION_MESSAGE);
            
        }else{
        
            JOptionPane.showMessageDialog(null, "No se ha podido realizar la actualización de los datos\n"
                                          + "Inténtelo nuevamente.", "Error en la operación", 
                                          JOptionPane.ERROR_MESSAGE);
        
        }
        
    } catch (SQLException e) {
    
        JOptionPane.showMessageDialog(null, "No se ha podido realizar la actualización de los datos\n"
                                          + "Inténtelo nuevamente.\n"
                                          + "Error: "+e, "Error en la operación", 
                                          JOptionPane.ERROR_MESSAGE);
    
    }finally{
    
        if(conexion!=null){
        
            try {
                
                conexion.close();
            
            } catch (SQLException e) {
            
                JOptionPane.showMessageDialog(null, "Error al intentar cerrar la conexión."
                                          + "Error: "+e, "Error en la operación", 
                                          JOptionPane.ERROR_MESSAGE);
                
            }
            
        }
           
    }
    

}

} 

NOTA: Lo que representa este código, es la creación de un método que hemos llamado “Modificar”; el cual, como su nombre lo indica, es el que nos va a permitir realizar las modificaciones de los registros que se encuentran en una tabla de la base de datos, para que de esta manera el usuario del software pueda corregir y/o actualizar los datos guardados previamente en el sistema. Como podemos ver, este es un método que necesita de otra Clase (Pool), para realizar la conexión con la base de datos (puedes ver la estructura de dicha Clase dando clic aquí).
NOTA: Algo muy importante a tener en cuenta de este método, es la parte de la sentencia SQL que hemos de establecer y/o usar para poder realizar modificaciones en los registros de la Base de datos. Si necesitas conocer un poco más sobre la estructura de este tipo de sentencia, dirígete a nuestro post: Sentencia SQL: Modificar datos de una tabla.

4. Teniendo en cuenta todo lo anterior, nuestra Clase “MetodosBD” quedaría de la siguiente forma:

package Metodos;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class MetodosBD {
    
Pool metodospool = new Pool();

public void Modificar(String nombres, String apellidos, String email, String celular, 
                      String direccion, String ciudad, String idcontacto){

int confirmar = JOptionPane.showConfirmDialog(null, "¿Desea modificar los datos actuales?");


if(confirmar == JOptionPane.YES_OPTION){

    Connection conexion = null;
    
    try {
    
        conexion = metodospool.dataSource.getConnection();
        
        String Ssql = "UPDATE contacto SET nombres=?, apellidos=?, email=?, celular=?, direccion=?, ciudad=? "
                    + "WHERE id_contacto=?";
        
        PreparedStatement prest = conexion.prepareStatement(Ssql);
        
        prest.setString(1, nombres);
        prest.setString(2, apellidos);
        prest.setString(3, email);
        prest.setString(4, celular);
        prest.setString(5, direccion);
        prest.setString(6, ciudad);
        prest.setString(7, idcontacto);
        
        if(prest.executeUpdate() > 0){
        
            JOptionPane.showMessageDialog(null, "Los datos han sido modificados con éxito", "Operación Exitosa", 
                                          JOptionPane.INFORMATION_MESSAGE);
            
        }else{
        
            JOptionPane.showMessageDialog(null, "No se ha podido realizar la actualización de los datos\n"
                                          + "Inténtelo nuevamente.", "Error en la operación", 
                                          JOptionPane.ERROR_MESSAGE);
        
        }
        
    } catch (SQLException e) {
    
        JOptionPane.showMessageDialog(null, "No se ha podido realizar la actualización de los datos\n"
                                          + "Inténtelo nuevamente.\n"
                                          + "Error: "+e, "Error en la operación", 
                                          JOptionPane.ERROR_MESSAGE);
    
    }finally{
    
        if(conexion!=null){
        
            try {
                
                conexion.close();
            
            } catch (SQLException e) {
            
                JOptionPane.showMessageDialog(null, "Error al intentar cerrar la conexión."
                                          + "Error: "+e, "Error en la operación", 
                                          JOptionPane.ERROR_MESSAGE);
                
            }
            
        }
           
    }
    

}

}
    
}

5. Ahora, vamos a dirigirnos nuevamente a nuestro formulario JAVA, y daremos doble clic (seguidos) sobre nuestro botón “Modificar”, para que de esta manera accedamos a la parte del código, más exactamente dentro del Evento que ejecutará todas las líneas de código que allí se coloquen (una vez se pulse sobre el botón):

Botón Modificar del formulario JAVA
"Botón Modificar"

6. Borraremos el comentario que está allí por defecto, y colocaremos el siguiente código:

MetodosBD metodosbd = new MetodosBD();        
        
if(idcontacto.isEmpty()){
       
       JOptionPane.showMessageDialog(null, "No hay datos para modificar.\n"
                                     + "Por favor, seleccione un registro de la tabla.", "Error en la operación", 
                                     JOptionPane.ERROR_MESSAGE);
       
}else{

        metodosbd.Modificar(txtNombrecontacto.getText(), txtApellidoscontacto.getText(), txtEmail.getText(), 
                            txtCelular.getText(), txtDireccion.getText(), cboxCiudad.getSelectedItem().toString(), 
                            idcontacto);

}       

Lo que hacemos es instanciar un objeto de la Clase “MetodosBD”, al cual hemos llamado con el mismo nombre; es decir, “metodosbd”.

Emplearemos un condicional “if-else”. La condición que usamos, es que la variable “idcontacto” (tipo String) no este vacía, dicha variable debe contener el código o id que identifica de forma única al registro de la tabla que queremos modificar; en otras palabras, el contenido de “idcontacto”, es la llave primaria de uno de los registros de la tabla que se encuentra en nuestra base de datos. Por lo cual, lógicamente, de forma anterior se ha debido realizar la consulta y/o búsqueda de datos desde el formulario que estamos usando, y mostrar dichos datos en los respectivos campos del mismo.


Si no sabes cómo realizar consultas de datos desde Java, puedes acceder a una explicación sencilla, en nuestro artículo: "Cómo hago el botón buscar?".

Da clic aquí, para saber cómo hacer para que los datos que hay en un JTable (luego de consultarlos en la base de datos), podamos mostrarlos en cada uno de los campos correspondientes de un formulario.


NOTA: La línea de código:
MetodosBD metodosbd = new MetodosBD(); 
Puedes colocarla afuera del método del botón (arriba, después de la llave de apertura de la Clase), pues esto es lo más recomendable, ya que posiblemente necesites usar otros métodos creados en la Clase “MetodosBD”; y por consiguiente, ya no tendrás que instanciarla nuevamente para hacer uso de los mismos, sino que tan sólo con instanciarla una sola vez, bastará.

Para obtener una explicación detallada línea por línea, del código que nos permitirá actualizar la información de los registros de nuestra base de datos, puedes cliquear aquí.

7. Ahora sólo debemos ejecutar nuestro proyecto y/o formulario, consultar el registro que hemos de actualizar, y realizar los cambios en los campos respectivos; a continuación, daremos clic en el botón “Modificar” y pulsaremos en el botón "Sí", y para finalizar daremos clic en el botón "Aceptar" del cuadro de diálogo que nos aparece:

Cuadro de diálogo informando sobre la actualización exitosa de los datos.
"Cuadro de diálogo"

Si deseas descargar el vídeo, junto con el fascículo (PDF) del presente tema, sólo debes dirigirte a nuestra Zona de Descargas, y dar clic sobre el icono "Curso de JAVA Parte 17".

Para ver la Parte 16 del Curso, puedes dar clic en el siguiente enlace: "Curso de JAVA: Cómo hago el botón Buscar?"
Para ampliar más tus conocimientos en cuanto a desarrollar software usando JAVA, puedes ver todos los capítulos de "Cómo lo hago en JAVA?"


¿Quieres aprender a realizar aún más cosas y personalizar tus programas hechos en el lenguaje de programación JAVA?, si tu respuesta es "Sí", puedes acceder a todos los tips que hemos estado publicando en este blog, dando clic aquí.
 
Suscríbete a nuestro blog, vía Email o RSS; además puedes seguirnos a través de nuestras redes sociales como: Facebook, Twitter, YouTube y Google+.

Si te fue de gran ayuda este material, no olvides compartirlo con tus amigos. 
Si tienes dudas o sugerencias al respecto; puedes dejarnos tus comentarios.
Bendiciones...








Comparte este artículo

votar

Sobre El Autor

Eduardo Bastidas UH

Cristiano y Colombiano. Analista de Sistemas & Blogger.
Me motiva mucho el poder compartir día tras día lo que he aprendido y voy aprendiendo en el área de las Tecnologías de la Información y las Comunicaciones.

14 comentarios:

  1. Eduardo Bastidas UH

    Como hacer que no modifique después de limpiar las cajas de texto? Yo decidi inhabilitar el boton modificar solo cuando se encuentren vacías las cajas de texto... De que otra forma puedes solucionar esto...?

    ResponderEliminar
    Respuestas
    1. Saludo estimado CE FLORIAN.
      Para este caso hay varias opciones, entre ellas:

      1- En el método que te permite limpiar las cajas de texto, coloca la línea de código que te permitirá deshabilitar el botón modificar.

      2- Si no deseas deshabilitar el botón modificar, deberás implementar dentro del método de dicho botón, un código que te ayude a verificar que cuando des clic en este, no haga nada si las cajas de texto están vacías, para ello puedes usar un condicional "if".
      Sin embargo, más que verificar si todas las cajas de texto están vacías, debes más que todo chequear que la variable o caja de texto que guarda el ID del registro a modificar no contenga ningún dato o sea igual a 0 (cero).

      Si tienes alguna duda me comentas.

      Bendiciones...

      Eliminar
  2. Buenas tardes, soy nuevo en java, quisiera que por favor me explicara en donde está definida la variable "idcontacto", cómo y en donde la creo.

    Muchas gracias

    ResponderEliminar
    Respuestas
    1. Saludos estimado visitante.
      Para aclarar tus dudas, puedes acceder a una explicación detallada de cada fragmento de código del botón modificar, dando CLIC AQUÍ.

      Bendiciones...

      Eliminar
  3. Este blog me a sacado de muchas dudas Gracias también tengo un blog sobre programacion lo cree hace poco https://lailusiondeseguridad.blogspot.com

    ResponderEliminar
  4. Excelente felicidades!

    Una duda... en caso que mi formulario cuente con datechooser, ¿como modifico la fecha?

    Espero tu ayuda! Bendiciones

    ResponderEliminar
    Respuestas
    1. Saludos Estimado.

      Primero deberás realizar de forma correcta la captura de la fecha seleccionada en tu JDateChooser, para ello:

      //Creas una variable tipo String

      String fecha=null;

      /*Creas una variable del tipo Date y allí almacenas la fecha que hay en tu JDateChooser*/

      Date fechajd=jDateChooser.getDate();

      /*Creas un objeto del tipo SimpleDateFormat, para crear un formato y aplicarlo a tu fecha; luego, guardas la fecha formateada en la variable String*/

      SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
      fecha=sdf.format(fechajd);

      Ahora dirígete a tu método "Modificar":

      /*Utiliza el método .setString no tendrás problema, ya que pasarás como parámetro la variable String (fecha)*/

      pst.setString(11, fecha);

      Realiza los pasos que te recomiendo, haz las pruebas y me comentas.

      Bendiciones...

      Eliminar
  5. No me permite aú! me dice que esta fuera de rango el index!!
    String fecha,fecha1=null;

    SimpleDateFormat("yyyy-MM-dd");
    fecha=sdf.format(fechajd);
    fecha=sdf.format(fechajd1);
    actualizar.Modificar(txt_empleado.getText(), txt_nombre.getText(),txt_apellido.getText(),cmb_ik.getSelectedItem().toString(),chek_exp.getText(), chek_ef.getText(),cmb_area.getSelectedItem().toS

    Date fechajd=date_inicio.getDate();
    Date fechajd1=date_final.getDate();


    SimpleDateFormat sdf=netring(),cmb_cert.getSelectedItem().toString());

    Tengo esto en mi Jframe que es para modificar en el boton modificar!

    Y tengo esto en el metodo modificar:

    public void Modificar(String id_empleado, String Nombre, String Apellidos, String Nivel,String IK,String Statusik, String Area, String Certificaciónes){
    String fecha=null;

    /*Creas una variable del tipo Date y allí almacenas la fecha que hay en tu JDateChooser*/



    /*Creas un objeto del tipo SimpleDateFormat, para crear un formato y aplicarlo a tu fecha; luego, guardas la fecha formateada en la variable String*/

    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

    int confirmar = JOptionPane.showConfirmDialog(null, "¿Desea modificar los datos actuales?");
    if(confirmar == JOptionPane.YES_OPTION){
    Connection conexion = null;


    try {






    // DriverSql ds = new DriverSql();

    // String Ssql = "UPDATE dbo.Empleados SET Nombre=?, Apellidos=?, IK=?, Statusik=? WHERE id_empleado=?";
    String Ssql = "UPDATE dbo.busc SET Nombre=?,Apellidos=?, IK=?,Statusik=?,Certificaciónes=?, FechaInicio=?, FechaFin=?, WHERE id_empleado=?";
    PreparedStatement prest = ds.con.prepareStatement(Ssql);

    Refresh b = new Refresh ();

    prest.setString(1, Nombre);
    prest.setString(2, Apellidos);

    prest.setString(3, IK);
    prest.setString(4, Statusik);
    prest.setString(5, Area);
    prest.setString(6, Certificaciónes);


    prest.setString(7, fecha);
    // prest.setString(8, fecha1);
    prest.setString(9, id_empleado);








    Espero tu ayuda y muchas gracias, explicas muy bieen!!

    ResponderEliminar
    Respuestas
    1. Saludos, verificando tu código, el error que te surge es porque estás asignando un valor adicional que no aparece en tu sentencia SQL, que en este caso es:

      prest.setString(5, Area);

      Verifica tu sentencia SQL y verás que ese campo no existe en dicha sentencia, por lo tanto deberás agregarlo.

      ¡CRISTO TE AMA!
      ¡ACEPTA HOY A JESUCRISTO COMO TU ÚNICO SALVADOR!

      ¡TU SITUACIÓN NO DETERMINA TU FUTURO, DIOS TIENE EL CONTROL!

      Bendiciones...

      Eliminar
  6. Hola ya pude actualizar, pero la momento de actualizar un campo, se me actualiza el de todos, despues vi porque el sql me faltaba el Where! entonces mí SQL queda asi:
    String Ssql = "UPDATE dbo.emcert SET Nombre=?,IK=?,Statusik=?,Area=?, FechaInicio=?, FechaFin=?"+ "WHERE id_empleado=?" ;
    En donde el id_empleado se incrementa solo y nunca lo incerto, de acuerdo...

    En mi tabla a actualizar(emcert) tengo id_tabla, n_empleado....
    el id_tabla es primario, como en tu caso es el id_contacto, el problema surge cuando quiero, agregar el parametro en mi boton de modificar:
    actualizar.Modificar(cmb_cert.getSelectedItem().toString(), cmb_ik.getSelectedItem().toString(),chek_exp.getText(),cmb_area.getSelectedItem().toString(),date_inicio.getDate().toString(),date_final.getDate().toString(),id_empleado);

    Me dice arroja este error: cannot fynd simbol, no se donde lo debo declarar si se supone es incremento solo y nunca se incerto!!
    En mi Metodo modificar lo tengo así:

    public void Modificar(String Nombre,String IK,String Statusik, String Area,String FechaInicio,String FechaFin,String id_empleado){

    Espero me puedas ayudar por favooooooooor!

    Bonito día!!

    ResponderEliminar
    Respuestas
    1. Saludos, a la hora de consultar y/o traer los datos de un determinado registro de tu tabla de la base de datos, debes de forma necesaria consultar el id de dicho registro y almacenarlo en una variable (en tu caso "id_empleado") para que a la hora de modificar la información no tengas el inconveniente que se te está presentando.

      Por lo cual, te aconsejo que veas el tutorial donde explico la forma de consultar información de tu base de datos desde JAVA, dando CLIC AQUÍ.

      Cualquier duda déjame tu comentario.

      ¡CRISTO VIVE!
      ¡ÉL TIENE GRANDES COSAS PARA TU VIDA!

      Bendiciones...

      Eliminar
  7. ¿Como edito dos checkbox, ya que tengo solo una columna para ello, y como puedo mandar traer cual esta seleccionado al JFrame??????????

    ResponderEliminar
  8. Tengo mí codigo casi igual al tuyo para la busqueda y me marca que no existe...

    public void Buscar(String valor, String filtro, JTable tablacontactos){
    DriverSql ds = new DriverSql();
    Connection cn = ds.conexion();
    String [] columnas={"N°Empleado","Nombre","Apellidos","Nivel-IK","Modalidad Ik","Area", "Certificación","FechaInicio","FechaFin"};
    String [] registro=new String[9];
    ModeloTabla=new DefaultTableModel(null,columnas);
    String SSQL;
    Connection conect = null;

    if(filtro.equals("n_empleado")){
    SSQL= "SELECT * FROM dbo.busc WHERE n_empleado LIKE '%"+valor+"%'";

    // SSQL= "SELECT dbo.emcert.Nombre, dbo.emcert.FechaInicio, dbo.emcert.id_empleado, dbo.emcert.FechaFin, dbo.Empleados.Nombre, dbo.Empleados.Apellidos, dbo.Empleados.IK, dbo.Empleados.Area FROM dbo.emcert INNER JOIN dbo.Empleados ON dbo.emcert.id_empleado = dbo.Empleados.id_empleado'%"+valor+"%'";
    }else if(filtro.equals("Nombre")){

    SSQL= "SELECT * FROM dbo.busc WHERE Nombre LIKE '%"+valor+"%'";
    }else if(filtro.equals("Apellidos")){

    SSQL= "SELECT * FROM dbo.busc WHERE Apellidos LIKE '%"+valor+"%'";


    }else if(filtro.equals("IK")){

    SSQL= "SELECT * FROM dbo.busc WHERE IK LIKE '%"+valor+"%'";

    }else if(filtro.equals("Statusik")){

    SSQL= "SELECT * FROM dbo.busc WHERE Statusik LIKE '%"+valor+"%'";

    }else if(filtro.equals("Area")){

    SSQL= "SELECT * FROM dbo.busc WHERE Area LIKE '%"+valor+"%'";

    }else if(filtro.equals("Certificaciónes")){

    SSQL= "SELECT * FROM dbo.busc WHERE Certificaciónes LIKE '%"+valor+"%'";


    }else if(filtro.equals("FechaInicio")){


    SSQL= "SELECT * FROM dbo.busc WHERE FechaInicio LIKE '%"+valor+"%'";

    }else{


    SSQL= "SELECT * FROM dbo.busc WHERE FechaFin LIKE '%"+valor+"%'";

    }


    try {

    PreparedStatement st2 = ds.conexion().prepareStatement(SSQL);

    ResultSet rs = st2.executeQuery();

    while (rs.next()){

    registro[0]=rs.getString("n_empleado");
    registro[1]=rs.getString("Nombre");
    registro[2]=rs.getString("Apellidos");

    registro[3]=rs.getString("IK");
    registro[4]=rs.getString("Statusik");
    registro[5]=rs.getString("Area");
    registro[6]=rs.getString("Certificaciónes");
    registro[7]=rs.getString("FechaInicio");
    registro[8]=rs.getString("FechaFin");

    ModeloTabla.addRow(registro);

    }
    tablacontactos.setModel(ModeloTabla);

    } catch (SQLException e) {


    JOptionPane.showMessageDialog(null, e, "Error durante el procedimiento", JOptionPane.ERROR_MESSAGE);


    }finally{

    if(conect!=null){

    try {

    conect.close();

    } catch (SQLException ex) {

    JOptionPane.showMessageDialog(null, ex, "Error de desconexión", JOptionPane.ERROR_MESSAGE);

    }

    }

    }

    }



    Sí pudieras ayudarme te lo agradeceria muchisimoo!!

    ResponderEliminar
    Respuestas
    1. Saludos estimado(a), ¿pudiste solucionar el inconveniente?, en caso de no ser así; por favor, regálame el código que colocaste dentro del botón "buscar".

      Bendiciones...

      Eliminar

RECIBIR NOTICIAS POR EMAIL


Suscríbete al boletín para recibir lo último en tu correo electrónico

¿NECESITAS AYUDA PARA PROGRAMAR EN JAVA SE Y MYSQL?