Olá,
o problema:
quando eu altero a coluna status no grid funciona bem mas quando eu altero apenas outro(s) campo(s) do grid sem alterar o status dá o seguinte erro:
Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: class br.com.alura.jdbc.modelo.Status cannot be cast to class java.lang.String (br.com.alura.jdbc.modelo.Status is in unnamed module of loader ‘app’; java.lang.String is in module java.base of loader ‘bootstrap’) at br.com.alura.jdbc.view.ProdutoCategoriaFrame2.alterar(ProdutoCategoriaFrame2.java:267)
segue o tercho de código do ProdutoCategoriaFrame2:
private void alterar() throws SQLException {
Object objetoDaLinha = (Object) modelo.getValueAt(tabela.getSelectedRow(), tabela.getSelectedColumn());
if (objetoDaLinha instanceof Integer) {
Integer id = (Integer) objetoDaLinha;
String nomeStr = (String) modelo.getValueAt(tabela.getSelectedRow(), 1);
String nome = nomeStr.toUpperCase();
String descricao = (String) modelo.getValueAt(tabela.getSelectedRow(), 2);
Status status = Status.valueOf((String) modelo.getValueAt(tabela.getSelectedRow(), 3));
Integer categoriaId = Integer.parseInt(modelo.getValueAt(tabela.getSelectedRow(), 4).toString());
this.produtoController.alterar(nome, descricao, status, id, categoriaId, null);
JOptionPane.showMessageDialog(this, "Item alterado com sucesso!");
} else {
JOptionPane.showMessageDialog(this, "Por favor, selecionar o ID");
}
}
o enum:
package br.com.alura.jdbc.modelo;
public enum Status {
EM_ESTOQUE, INDISPONIVEL, ENCOMENDADO;
}
o DAO:
public void alterar(String nome, String descricao, Status status, Integer id, Integer categoriaId, String categoriaNome) throws SQLException {
try (PreparedStatement stm = connection.prepareStatement("UPDATE PRODUTO SET NOME = ?, DESCRICAO = ?, STATUS=?, CATEGORIA_ID = ? WHERE ID = ?")) {
stm.setString(1, nome);
stm.setString(2, descricao);
stm.setString(3, status.name().toString());
stm.setInt(4, categoriaId);
stm.setInt(5, id);
stm.execute();
connection.commit(); // controle da transação
}
catch (SQLException e) {
e.printStackTrace();
connection.rollback();
throw new RuntimeException(e);
}
}
toda ajuda é bem vinda! Valeu!