Problem with updating method in Database

2

I have this method save in a class that controls frame events:

    if(e.getSource()== estMostrar.getBtnModificar()){

        String nombre= estMostrar.getTxtNombre().getText();
        String materia= estMostrar.getTxtMatricula().getText();
        String nota= estMostrar.getTxtNota().getText();

        this.estDAO.actualizar(new Estudiante(nombre, materia, Integer.parseInt(nota)));
        this.ListarTabla(estAdmin.getTablaEstudiante());

        this.LimpiarCampos();
        this.estMostrar.dispose();
    }

The method that introduces the data to be saved is the estDAO.update :

this.estDAO.actualizar(new Estudiante(nombre, materia, Integer.parseInt(nota)));

What this does is that it sends the data as parameters to the DAO method that handles the query:

    public void actualizar(Estudiante e) {
    Connection con= null;
    PreparedStatement pstm= null;

        try {
            con= dbcon.conectar();

            String sql= "UPDATE notas SET nombre= ?, matricula= ?, nota= ?";
            pstm= con.prepareStatement(sql);

        pstm.setString(1, e.getNombre());
        pstm.setString(2, e.getMatricula());
        pstm.setInt(3, e.getNota());

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error al conectar a la BD");
        }finally{
            dbcon.desconectar(con);
        }
}

But when checking the Database the object that I modified is still the same, could you tell me if there is something wrong in the code or how can I solve the problem, thanks in advance.

By order of the teacher I can not modify the update method, since they are part of a interface and he does not want that interface to change; finally I chose to modify it according to their recommendations, I have left the modify method like this:

    if(e.getSource()== estMostrar.getBtnModificar()){

        int fila= estAdmin.getTablaEstudiante().getSelectedRow();

        int id= Integer.parseInt(estAdmin.getTablaEstudiante().getValueAt(fila, 0).toString());

        String nombre= estMostrar.getTxtNombre().getText();
        String materia= estMostrar.getTxtMatricula().getText();
        String nota= estMostrar.getTxtNota().getText();

        this.estDAO.actualizar(new Estudiante(nombre, materia, Integer.parseInt(nota)), id);
        this.ListarTabla(estAdmin.getTablaEstudiante());

        this.LimpiarCampos();
        this.estMostrar.dispose();
    }

However, now the method gives me an exception NumberFormatException , I try to select an object from a JTable to modify it and when I press the getBtnModify button, the method gives this stackTrace :

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "fklm"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at comm.estudiante.dao.controlador.ControladorEstudiante.actionPerformed(ControladorEstudiante.java:220)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6535)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6300)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

row 220 is this:

int id= Integer.parseInt(estAdmin.getTablaEstudiante().getValueAt(fila, 0).toString());
    
asked by David Calderon 09.09.2016 в 03:16
source

1 answer

3

You need to execute the query in addition to the where, and that your method when invoking it receives two parameters, and you only have one, try with this

public void actualizar(Estudiante e, int id) {
    Connection con= null;
    PreparedStatement pstm= null;

        try {
            con= dbcon.conectar();

            String sql= "UPDATE notas SET nombre= ?, matricula= ?, nota= ? WHERE id = ?";
            pstm= con.prepareStatement(sql);

        pstm.setString(1, e.getNombre());
        pstm.setString(2, e.getMatricula());
        pstm.setInt(3, e.getNota());
        pstm.setInt(4, id);
        //ejecutamos el sql
        pstm.executeUpdate() ;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error al conectar a la BD");
        }finally{
            dbcon.desconectar(con);
        }
}
    
answered by 09.09.2016 / 03:36
source