Foro de elhacker.net

Programación => Java => Mensaje iniciado por: padiuwu en 23 Abril 2019, 05:44 am



Título: Alguien que me pueda ayudar con lo siguiente .CRUD con MVC y POO en Java y MySQL
Publicado por: padiuwu en 23 Abril 2019, 05:44 am
Estoy trabajando en proyecto de JAVA con MySQL con MVC, y me ha surgido el siguiente problema. Tengo dos botones para realizar la acción actualizar. Primero, presiono un registro de la tabla y de ahí el botón BUSCAR para que el id del registro aparezca en el formulario.

Después de esto, lleno todos los campos que quiero editar y, al presionar el botón EDITAR, me aparece el mensaje surgió un error al actualizar y otro error com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '13' for key 'PRIMARY'.
Código
  1. if (e.getSource() == this.forminventario.btnBuscar) {
  2.        int filaEditar = this.forminventario.tbProducto.getSelectedRow();
  3.        int numfilas = this.forminventario.tbProducto.getSelectedRowCount();
  4.  
  5.        if(filaEditar>=0 && numfilas==1){
  6.            this.forminventario.txtId.setText(String.valueOf(this.forminventario.tbProducto.getValueAt(filaEditar, 0)));
  7.  
  8.            this.forminventario.btnBuscar.setEnabled(false);
  9.            this.forminventario.btnEditar.setEnabled(true);
  10.            this.forminventario.btnEliminar.setEnabled(false);
  11.            this.forminventario.btnGuardar.setEnabled(false);
  12.            this.forminventario.btnImprimir.setEnabled(false);
  13.            this.forminventario.btnRefrescar.setEnabled(false);
  14.            this.forminventario.btnRetirar.setEnabled(false);
  15.        } else
  16.            JOptionPane.showMessageDialog(null, "SELECCIONE UN REGISTRO");
  17.    }
  18.  
  19. if (e.getSource() == forminventario.btnEditar) {
  20.        try {
  21.               int id = Integer.parseInt(this.forminventario.txtId.getText());
  22.               String codigo = this.forminventario.txtCodigo.getText();
  23.               String nombre = this.forminventario.txtNombre.getText();
  24.               String descripcion = this.forminventario.txtDescripcion.getText();
  25.               float precio = Float.parseFloat(this.forminventario.txtPrecio.getText());
  26.               int stock = Integer.parseInt(this.forminventario.txtStock.getText());
  27.  
  28.               dbproducto.actualizar(producto);
  29.               clean();
  30.               JOptionPane.showMessageDialog(forminventario, "¡REGISTRO ACTUALIZADO!");
  31.  
  32.            //this.cargarTabla("");
  33.            this.forminventario.btnBuscar.setEnabled(true);
  34.            this.forminventario.btnEditar.setEnabled(false);
  35.            this.forminventario.btnEliminar.setEnabled(true);
  36.            this.forminventario.btnGuardar.setEnabled(true);
  37.            this.forminventario.btnImprimir.setEnabled(true);
  38.            this.forminventario.btnRefrescar.setEnabled(true);
  39.            this.forminventario.btnRetirar.setEnabled(true);
  40.  
  41.        } catch (Exception ex) {
  42.            Logger.getLogger(ControladorProducto.class.getName()).log(Level.SEVERE, null, ex);
  43.        }
  44.  
  45.    }
  46.  
  47. //Metodo actualizar
  48. @Override
  49. public void actualizar(Object objeto) throws Exception {
  50.    ModeloProducto producto = (ModeloProducto) objeto;
  51.  
  52.    try {
  53.  
  54.        this.connect();
  55.  
  56.        String sql = "UPDATE productos SET idProducto = ?, nombre = ?, codigo = ?, descripcion = ?, precio = ?, stock = ?;";
  57.  
  58.        this.sqlConsulta = this.conexion.prepareStatement(sql);
  59.  
  60.        this.sqlConsulta.setInt(1, producto.getId());
  61.        this.sqlConsulta.setString(2, producto.getNombre());
  62.        this.sqlConsulta.setString(3, producto.getCodigo());
  63.        this.sqlConsulta.setString(4, producto.getDescripcion());
  64.        this.sqlConsulta.setFloat(5, producto.getPrecio());
  65.        this.sqlConsulta.setInt(6, producto.getStock());
  66.        //this.sqlConsulta.setInt(7, 1);
  67.  
  68.        // Executa consulta y Cerrar conexion
  69.        this.sqlConsulta.executeUpdate();
  70.  
  71.    } catch (SQLException e) {
  72.        System.err.println("SURGIO UN ERROR AL ACTUALIZAR");
  73.    }
  74.  
  75.    this.desconectar();
  76. }


Título: Re: Alguien que me pueda ayudar con lo siguiente .CRUD con MVC y POO en Java y MySQL
Publicado por: CalgaryCorpus en 23 Abril 2019, 07:31 am
Sugiero probar esto:
que en vez de hacer UPDATE y un monton de set, hagas set a todos los campos menos al campo id (que supongo es la unico campo que es la llave primaria de esa tabla), y que ese campo id sea parte de la condicion where, que no incluyes, asi que sugiero incluirla.

UPDATE SET campo1 = ?, campo2 = ?, ...
WHERE id = ?


Título: Re: Alguien que me pueda ayudar con lo siguiente .CRUD con MVC y POO en Java y MySQL
Publicado por: padiuwu en 23 Abril 2019, 18:30 pm
He realizado lo que me sugeriste y ya no me marca un error y me dice que el registro se ha realizado correctamente pero no se actualiza.
Código
  1. //Metodo actualizar
  2.    @Override
  3.    public void actualizar(Object objeto) throws Exception {
  4.        ModeloProducto producto = (ModeloProducto) objeto;
  5.  
  6.        try {
  7.  
  8.            this.connect();
  9.  
  10.            String sql = "UPDATE productos SET nombre = ?, codigo = ?, descripcion = ?, precio = ?, stock = ? WHERE idProducto = ?;";
  11.  
  12.            this.sqlConsulta = this.conexion.prepareStatement(sql);
  13.  
  14.            //this.sqlConsulta.setInt(1, producto.getId());
  15.            this.sqlConsulta.setString(1, producto.getNombre());
  16.            this.sqlConsulta.setString(2, producto.getCodigo());
  17.            this.sqlConsulta.setString(3, producto.getDescripcion());
  18.            this.sqlConsulta.setFloat(4, producto.getPrecio());
  19.            this.sqlConsulta.setInt(5, producto.getStock());
  20.            this.sqlConsulta.setInt(6, producto.getId());
  21.  
  22.            // Executa consulta y Cerrar conexion
  23.            this.sqlConsulta.executeUpdate();
  24.            this.sqlConsulta.close();
  25.  
  26.        } catch (SQLException e) {
  27.            System.err.println("SURGIO UN ERROR AL ACTUALIZAR");
  28.            e.printStackTrace();
  29.        }
  30.  
  31.        this.desconectar();
  32.  
  33.    }


Título: Re: Alguien que me pueda ayudar con lo siguiente .CRUD con MVC y POO en Java y MySQL
Publicado por: CalgaryCorpus en 23 Abril 2019, 19:08 pm
Como haces para saber que no se actualiza?
tal vez es que te falta cerrar la conexion (no el preparedStatement, solamente sino tambien la conexion)?

(Sugiero elimina los "this." de cada linea donde aparecen. Son superfluos alli)