Meu programa não dá update no Banco de Dados?

Meu programa simplesmente não atualiza, não gera nenhum erro, nada, apenas executa tudo e não atualiza o banco. Segue a seguir o código

public static void update(Connection conn, Produto p){
    try{
        PreparedStatement pstm = conn.prepareStatement(
                "UPDATE produto "+
                "  SET cod_produto = ?,cod_fornecedor=?, produto_nome=?,"
                        + " produto_marca=?, produto_venda=?, produto_estoque=?"
                        + ", produto_unidade=?"   + 
                "  WHERE cod_produto=?;"
        );
        pstm.setInt(1, p.getCod_produto());
        pstm.setInt(2, p.getFornecedor_produto().getCod_fornecedor());
        pstm.setString(3, p.getNome_produto());
        pstm.setString(4, p.getMarca_produto());
        pstm.setDouble(5,p.getPreco_produto());
        pstm.setInt(6, p.getEstoque_produto());
        pstm.setString(7, p.getUnidade_produto());
        pstm.setInt(8, p.getCod_produto());
        JOptionPane.showMessageDialog(null, "Foi!");
        pstm.execute();
    }catch(SQLException ex){
        System.err.println(ex.getMessage());
    }
}
1 curtida

Ele executa o SQL de update com sucesso ?
Já tentou executar um commit após a execução do update ?

1 curtida

Qual é o banco de dados?
Aparece o JOptionPane com a mensagem “Foi”?

Cara, primeiro executa essa query direto no SGBD.
Se acontecer o esperado, verifica o nome o programa está chegando no método que faz o update (há duas formas, com depurador ou vai colocando System.out.println("optinal messsage");).

Se possível posta o toda a parte que envolve essa query (a classe que executa o fluxo do programa, DAO e o Bean).

E se tiver dado certo ou não, responde aí.

nessa linha pôe

pstm.executeUpdate();

e depois abre o JOptionPane

Fiz isso e não deu certo :frowning:

Postgresql e aparece sim

Como eu poderia executar esse commit no pstm e direto do SGBD funciona de boa, mas quando faço pelo java não vai :frowning:

Por padrão, o JDBC trabalha com auto commit, salvo se você alterou isso. Se não o fez explicitamente, vai permanecer como padrão.
Realizando o select, no java, utilizando o mesmo código do produto, retorna algum valor?

Na minha lista retorna todos os valores normalmente, até mesmo quando eles são criados, o problema é quando eu dou o update, ele simplesmente não acontece e quando eu listo no SGBD e no Java não acontece simplesmente nenhuma alteração

PreparedStatement pstm = conn.prepareStatement(
                "UPDATE produto "+
                "  SET cod_produto = ?,cod_fornecedor=?, produto_nome=?,"
                        + " produto_marca=?, produto_venda=?, produto_estoque=?"
                        + ", produto_unidade=?"   + 
                "  WHERE cod_produto=?;"
                        + "commit;"
        );

Utilizei o commit e não foi modificado nada :frowning:

Você já se certificou que o valor passado para

pstm.setInt(8, p.getCod_produto());

Está correto?

Para utilizar o commit, você precisa colocar o begin no início da instrução.

Verdade, um erro bobo meu, me desculpa ter feito vcs perder tempo com isso, mas a minha classe ta autoincrementando o meu codigo do produto, eu seleciono o 3 ele fala que ta pegando o codigo do proximo. Muito obrigado Luis e me desculpa pelo erro super bobo T.T

Agora que você encontrou a resposta, posso dizer que, como vi a query e me parecia ok, esta era a minha primeira opção. Como preferi não acreditar nisso, logo de cara, questionei qual seria o banco de dados.
Se fosse Oracle, eu iria reiterar o que o @Jonathan_Medeiros disse: vai de commit na fé.
Como o banco é Postgres, ele não exige commit (na verdade, como eu disse, é auto commit), a ideia inicial voltou à tona: confirmar se o código era o correto.

Pode ser realizado dessa forma: conexaoBD.commit();

Obs: No seu código de Update você está alterando o valor da sua chave PK (set cod_produto = ?), e isso não pode ocorrer!