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);
}
}