Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Duda] [Duda] Problema al guardadar

Buenos dias, realicé todo en base a cómo se indicaba en el video, sin embargo, al momento de querer guardar las 100 linternas, me arroja el siguiente error

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).


    private void eliminar() {
        if (tieneFilaElegida()) {
            JOptionPane.showMessageDialog(this, "Por favor, elije un item");
            return;
        }

        Optional.ofNullable(modelo.getValueAt(tabla.getSelectedRow(), tabla.getSelectedColumn()))
                .ifPresentOrElse(fila -> {
                    Integer id = Integer.valueOf(modelo.getValueAt(tabla.getSelectedRow(), 0).toString());

                    int cantidadEliminada;

                    try {
                        cantidadEliminada = this.productoController.eliminar(id);
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        throw new RuntimeException(e);
                    }

                    modelo.removeRow(tabla.getSelectedRow());

                    JOptionPane.showMessageDialog(this, cantidadEliminada + " Item eliminado con éxito!");
                }, () -> JOptionPane.showMessageDialog(this, "Por favor, elije un item"));
    }

    private void cargarTabla() {
        try {
            var productos = this.productoController.listar();

            try {
                productos.forEach(producto -> modelo.addRow(new Object[] { producto.get("ID"), producto.get("NOMBRE"),
                producto.get("DESCRIPCION"), producto.get("CANTIDAD")}));
            } catch (Exception e) {
                throw e;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            throw new RuntimeException(e);
        }
    }

    private void guardar(){
        if (textoNombre.getText().isBlank() || textoDescripcion.getText().isBlank()) {
            JOptionPane.showMessageDialog(this, "Los campos Nombre y Descripción son requeridos.");
            return;
        }

        Integer cantidadInt;

        try {
            cantidadInt = Integer.parseInt(textoCantidad.getText());
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, String
                    .format("El campo cantidad debe ser numérico dentro del rango %d y %d.", 0, Integer.MAX_VALUE));
            return;
        }

        // TODO
        var producto = new HashMap<String, String>();
        producto.put("NOMBRE", textoNombre.getText());
        producto.put("DESCRIPCION", textoDescripcion.getText());
        producto.put("CANTIDAD", String.valueOf(cantidadInt));
        var categoria = comboCategoria.getSelectedItem();

        try {
            this.productoController.guardar(producto);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            throw new RuntimeException(e);
        }

        JOptionPane.showMessageDialog(this, "Registrado con éxito!");

        this.limpiarFormulario();
    }

    private void limpiarFormulario() {
        this.textoNombre.setText("");
        this.textoDescripcion.setText("");
        this.textoCantidad.setText("");
        this.comboCategoria.setSelectedIndex(0);
    }

}
1 respuesta
solución!

Solucionado! el error estaba en la clase ProductoController.java

PreparedStatement statement = con.prepareStatement("INSERT INTO PRODUCTO(nombre, descripcion, cantidad)" +
        "VALUES('?, ?, ?');"

Dentro de VALUES() pues tenia las comillas simples '?,?,?' de esta manera, cuando debieron eliminarse y quedar ?,?,?

El codigo correcto quedaria como

PreparedStatement statement = con.prepareStatement("INSERT INTO PRODUCTO(nombre, descripcion, cantidad)" +
        "VALUES(?, ?, ?);"