[RESOLVIDO] Dúvida em um UPDATE utilizado dentro do java

6 respostas Resolvido
javamysql
V

Então, tenho uma tela de cadastro com o botão alterar que faz o UPDATE no banco e está funcionando certinho, realizando o UPDATE, porém o CPF que é a Primary Key no banco ele não está atualizando, está mantendo o que estava no banco.
E não encontrei nenhuma falha nos códigos, então não sei o por que não está alterando.

Os códigos são os seguintes:
VIEW
BOTÃO ALTERAR JOGA AS INFORMAÇÕES PARA OS CAMPOS

private void btnAlterarActionPerformed(java.awt.event.ActionEvent evt) {                                           
    salvarAlterar = "altear";
    modelCadastroUsuarios = new ModelCadastroUsuarios();
    int linha = tabelaConsultaUsuarios.getSelectedRow();
    long codigo = 0;
    if (linha < 0) {
        JOptionPane.showMessageDialog(this, "Selecione um produto na tabela, antes de clicar em alterar!");
        limparCampos();
    } else {

        BLDatas bl = new BLDatas();

        codigo = (long) tabelaConsultaUsuarios.getValueAt(linha, 0);
        modelCadastroUsuarios = controllerCadastroUsuarios.retornarCadastroUsuariosController(codigo);

        fieldCPF.setText(String.valueOf(modelCadastroUsuarios.getCpf()));
        fieldNome.setText(modelCadastroUsuarios.getNome());
        fieldEmail.setText(modelCadastroUsuarios.getEmail());
        fieldTelefone.setText(String.valueOf(modelCadastroUsuarios.getTelefone()));
        try {
            fieldDataNascimento.setText(bl.converterDataUSParaDateString(modelCadastroUsuarios.getDataNascimento()));
        } catch (Exception ex) {
            Logger.getLogger(ViewCadastroUsuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        fieldUsuario.setText(modelCadastroUsuarios.getUsuNome());
        fieldSenha.setText(modelCadastroUsuarios.getUsuSenha());
    }

    habilitarDesabilitarCampos(true);
}

AGORA A FUNÇÃO DE SALVAR E ALTERAR
OBS: NESTE CÓDIGO O ALTERAR JÁ IRÁ CAIR NO ELSE, O IF SERÁ CASO A PESSOA ESCOLHA SALVAR UM NOVO CADASTRO.

public void salvar() {

    BLDatas bl = new BLDatas();

    modelCadastroUsuarios = new ModelCadastroUsuarios();
    modelCadastroUsuarios.setCpf(Long.parseLong(fieldCPF.getText()));
    modelCadastroUsuarios.setNome(fieldNome.getText());
    modelCadastroUsuarios.setEmail(fieldEmail.getText());
    modelCadastroUsuarios.setTelefone(Long.parseLong(fieldTelefone.getText()));
    try {
        modelCadastroUsuarios.setDataNascimento(bl.converterDataStringParaDate(fieldDataNascimento.getText()));
    } catch (Exception ex) {
        Logger.getLogger(ViewCadastroUsuario.class.getName()).log(Level.SEVERE, null, ex);
    }
    modelCadastroUsuarios.setUsuNome(fieldUsuario.getText());
    modelCadastroUsuarios.setUsuSenha(fieldSenha.getText());

    if (salvarAlterar.equals("salvar")) {
        if (controllerCadastroUsuarios.salvarCadastroUsuariosController(modelCadastroUsuarios) >= 0) {
            JOptionPane.showMessageDialog(this, "Cadastro de usuário realizado com sucesso!", "Notificação", JOptionPane.WARNING_MESSAGE);
            limparCampos();
            habilitarDesabilitarCampos(false);
            salvarAlterar = "salvar";
        } else {
            JOptionPane.showMessageDialog(this, "Erro ao cadastrar o usuário!", "Erro", JOptionPane.ERROR_MESSAGE);
        }
    } else {
 if (controllerCadastroUsuarios.atualizarCadastroUsuariosController(modelCadastroUsuarios)) {
            JOptionPane.showMessageDialog(this, "Cadastro alterado com sucesso!", "Sucesso", JOptionPane.INFORMATION_MESSAGE);
            limparCampos();
            carregarCadastros();
            salvarAlterar = "alterar";
        } else {
            JOptionPane.showMessageDialog(this, "Erro ao alterar o cadastro!", "Erro", JOptionPane.ERROR_MESSAGE);
        }
    }
}

AGORA O UPDATE:

public boolean atualizarCadastroUsuariosDAO(ModelCadastroUsuarios pModelCadastroUsuarios) {
    try {
        this.conectar();
        return this.executarUpdateDeleteSQL(
                "UPDATE tbl_usuarios SET "
                + "pk_id_codigo = '" + pModelCadastroUsuarios.getCpf() + "',"
                + "cad_usu_nome = '" + pModelCadastroUsuarios.getNome() + "',"
                + "cad_usu_email = '" + pModelCadastroUsuarios.getEmail() + "',"
                + "cad_usu_telefone = '" + pModelCadastroUsuarios.getTelefone() + "',"
                + "cad_usu_dataNasc = '" + pModelCadastroUsuarios.getDataNascimento()+ "',"
                + "cad_usu_login = '" + pModelCadastroUsuarios.getUsuNome() + "',"
                + "cad_usu_senha = '" + pModelCadastroUsuarios.getUsuSenha() + "'"
                + " WHERE "
                + "pk_id_codigo = '" + pModelCadastroUsuarios.getCpf() + "'"
                + ";"
        );
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    } finally {
        this.fecharConexao();
    }
}

6 Respostas

Jonathan_Medeiros

Uma pergunta antes de mais nada, porquê fazer isso?

A chave primária de registros não é pra ser atualizada mesmo, não faz sentido atualizar o identificador único do registro!

V

Eu gostaria que tivesse está opção por que é o CPF, e não um código serial no banco de dados.
E caso a pessoa cadastre errado o número de CPF tenha a opção de realizar a correção.

Lucas_Camara
Solucao aceita

Evite usar chaves naturais. Use chaves burras (id autoincremento). Isso vai te poupar muita dor de cabeça.

V

Entendi, então irei criar um novo campo na minha tela para atribuir um código com auto incremento e defini-lo como primary key no banco de dados e também manter o CPF apenas como um segundo código para buscas.

Jonathan_Medeiros

A ideia é, se o CPF é sua PK, então não permita que o usuário possa cadastrar um CPF incorreto/inválido, se quiser manter CPF como PK, valide a informação antes da persistência na base!

Caso contrário, que eu recomendo fortemente é, faça da forma que o @Lucas_Camara mencionou!

V

Já alterei toda a tela, agora defini o código com auto incremento, está funcionando corretamente.
Obrigado.

Criado 19 de setembro de 2019
Ultima resposta 19 de set. de 2019
Respostas 6
Participantes 3