SqlUpdate does not change data in the database [duplicate]

0

Note: Many people could not solve this question and they marked my question as wrongly duplicated because of an answer in another question similar to this but the answer does not help me at all . >

I'm developing software for a MVC (Model-view-controller) design video store and there's a problem with not changing the person's attributes. When I'm going to change by clicking on my save button to save my changes it displays the message "changed successfully" but does not really change!

VideoClass class including the save and change buttons, from the view layer:

 public VideoPessoa() {
            initComponents();

            new Conexao();
            pessoaController = new PessoaController();
            pessoa = new Pessoa();
            this.carregarPessoas();
             this.novaPessoa();
            this.habilitarCampos();

        }

    public boolean alterarPessoa() {
            pessoa.setCodigo( Integer.parseInt(this.txtCodigo.getText()));
            pessoa.setNome(this.txtNome.getText());
            pessoa.setEndereco(this.txtEndereco.getText());
            pessoa.setBairro(this.txtBairro.getText());
            pessoa.setCPF(this.txtCPF.getText());
            pessoa.setSexo(this.txtSexo.getText());
            pessoa.setUf(this.txtUF.getText());
            pessoa.setCelular(this.txtCelular.getText());
            pessoa.setTelefone(this.txtTelefone.getText());
            pessoa.setCidade(this.txtCidade.getText());

            if (pessoaController.alterar(pessoa)) {

                JOptionPane.showMessageDialog(this, "Registro alterado com sucesso!");
                 this.desabilitarCampos();
                this.carregarPessoas();
            } else {

                JOptionPane.showMessageDialog(this, "Erro ao alterar os dados!", "ERRO", JOptionPane.ERROR_MESSAGE);

            }

            return true;

        }

private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:

      if (!alterarPessoa){
              salvarPessoa();
          } else {
              alterarPessoa();
          }

    }                                         

    private void btnAlterarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
       habilitarCampos();
     recuperarPessoas();
     alterarPessoa = true;

    }                     

PersonController class:

public class PessoaController {

    private final PessoaDAO pessoaDAO;

    public PessoaController() {
        pessoaDAO = new PessoaDAO();

    }

 public boolean alterar( Pessoa pessoa ) {
        boolean retorno;

        retorno = pessoaDAO.alterar(pessoa);

        System.out.println("Pessoa: "+pessoa); 

        return retorno;
    }

PersonaDAO class, including the method of changing people:

public class PessoaDAO {

    private Connection con;

    private final String SQLSELECT = " SELECT  codigo, nome, endereco, bairro, sexo, telefone, celular, CPF,  uf, cidade FROM PESSOA";

    private final String SQLUPDATE = " UPDATE pessoa"
            + " SET nome = ?, "
            + " endereco = ?, "
            + " bairro   = ?, "
            + " sexo     = ?, "
            + " telefone = ?, "
            + " celular  = ?, "
            + " CPF      = ?, "
            + " uf       =?, "
            + " cidade   =? "
            + " WHERE codigo = ?";

    private PreparedStatement sqlSelect, sqlUpdate;

    public PessoaDAO() {

        con = Conexao.getConnection();
        try {
            sqlSelect = con.prepareStatement(SQLSELECT);
            sqlUpdate = con.prepareStatement(SQLUPDATE);
        } catch (SQLException ex) {
            Logger.getLogger(PessoaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public Pessoa getPessoaPeloCodigo(int codigo) {

        Pessoa pessoa = null;
 try (
            PreparedStatement ps = con.prepareStatement(SQLPESSOAPELOCODIGO)
        ) {
            ps.setInt(1, codigo);
            try (ResultSet rs = ps.executeQuery()) {
                if (!rs.next()) return null; // Não encontrou.
                // Instancia a nova pessoa.
                //Instancia o novo filme
                pessoa = new Pessoa();

                //Seta as informações no filme
                pessoa.setCodigo(rs.getInt("codigo"));
                pessoa.setNome(rs.getString("nome"));
                pessoa.setEndereco(rs.getString("endereco"));
                pessoa.setBairro(rs.getString("bairro"));
                pessoa.setSexo(rs.getString("sexo"));
                pessoa.setTelefone(rs.getString("telefone"));
                pessoa.setCelular(rs.getString("celular"));
                pessoa.setCPF(rs.getString("CPF"));

                pessoa.setUf(rs.getString("uf"));
                pessoa.setCidade(rs.getString("cidade"));

            }
        } catch (SQLException ex) {
            Logger.getLogger(PessoaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return pessoa;
    }

public boolean alterar(Pessoa pessoa) {
        boolean retorno = false;
        try {
            sqlUpdate.setInt(1, pessoa.getCodigo());
            sqlUpdate.setString(2,pessoa.getNome());
            sqlUpdate.setString(3, pessoa.getEndereco());
            sqlUpdate.setString(4, pessoa.getBairro());
            sqlUpdate.setString(5, pessoa.getSexo());
            sqlUpdate.setString(6, pessoa.getTelefone());
            sqlUpdate.setString(7, pessoa.getCelular());
            sqlUpdate.setString(8, pessoa.getCPF());
            sqlUpdate.setString(9, pessoa.getUf());
            sqlUpdate.setString(10, pessoa.getCidade());


            sqlUpdate.executeUpdate();

            retorno = true;

        } catch (SQLException ex) {
            Logger.getLogger(PessoaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return retorno;
    }
    
asked by anonymous 27.10.2015 / 19:43

1 answer

0

It seems that the past parameters are not in the right order to perform the update, see:

UPDATE pessoa SET
    nome = ?,    <--- 1
    endereco = ?,<--- 2
    bairro   = ?,<--- 3
    sexo     = ?,<--- 4
    telefone = ?,<--- 5
    celular  = ?,<--- 6
    CPF      = ?,<--- 7
    uf       = ?,<--- 8
    cidade   = ? <--- 9
WHERE codigo = ? <--- 10

Look at binds now, codigo should be number 10 and not number 1, since the first question refers to the nome

sqlUpdate.setInt(1, pessoa.getCodigo());
sqlUpdate.setString(2,pessoa.getNome());
sqlUpdate.setString(3, pessoa.getEndereco());
sqlUpdate.setString(4, pessoa.getBairro());
sqlUpdate.setString(5, pessoa.getSexo());
sqlUpdate.setString(6, pessoa.getTelefone());
sqlUpdate.setString(7, pessoa.getCelular());
sqlUpdate.setString(8, pessoa.getCPF());
sqlUpdate.setString(9, pessoa.getUf());
sqlUpdate.setString(10, pessoa.getCidade());

The final code should look like this:

sqlUpdate.setString(1,pessoa.getNome());
sqlUpdate.setString(2, pessoa.getEndereco());
sqlUpdate.setString(3, pessoa.getBairro());
sqlUpdate.setString(4, pessoa.getSexo());
sqlUpdate.setString(5, pessoa.getTelefone());
sqlUpdate.setString(6, pessoa.getCelular());
sqlUpdate.setString(7, pessoa.getCPF());
sqlUpdate.setString(8, pessoa.getUf());
sqlUpdate.setString(9, pessoa.getCidade());
sqlUpdate.setInt(10, pessoa.getCodigo());
int linhasAfetadas = sqlUpdate.executeUpdate(SQLUPDATE);

if(linhasAfetadas > 0){
   return true;
}else{
   return false;
} 
    
28.10.2015 / 18:42