Mesmo Botão para salvar e alterar usuário como fazer?

16 respostas
magnnos

opa oia eu d novo!

Direto ao assunto, quero usar o mesmo jbottom para salvar ou alterar

lógica que usei…
Pega o nome faz uma consulta, e comparar o resultado da consulta com o mesmo nome;
se isso tudo der certo pergunta se quer alterar, se der errado salva direto nem pergunta nada.

da um erro, ele não salva, e como uma falha na pesquisa caso o usuário não exista e ai como eu faço?

la vai os códigos:

esse e o botão:

private void jButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-
 FIRST:event_jButtonSalvarActionPerformed
    String cadSenha1 = new String(txtCadSenha1.getPassword());
    String cadSenha2 = new String(txtCadSenha2.getPassword());
    
    mod.setPesquisa(txtCadNome.getText());
    BeansUsuario model = cont.busca(mod);

    if (!txtCadNome.getText().isEmpty() && !txtCadLogin.getText().isEmpty()) {
        if (model.getNome().equals(txtCadNome.getText()) && 
  model.getLogin().equals(txtCadLogin.getText())) {
           int x = JOptionPane.showConfirmDialog(this, "Usuário ou Login Cadastrado! deseja alterar?");
            if (x == JOptionPane.YES_OPTION) {
                String novaSenha1 = new String(txtCadSenha1.getPassword());
                String novaSenha2 = new String(txtCadSenha2.getPassword());
                if (novaSenha1.equals(novaSenha2) && !novaSenha1.isEmpty()) {
                    mod.setLogin(txtCadLogin.getText());
                    mod.setSenha(txtCadSenha1.getText());
                    mod.setNome(txtCadNome.getText());
                    mod.setTelefone(txtTelefone.getText());
                    mod.setTipo(jComboTipo.getSelectedItem().toString());
                    cont.editar(mod);
                    txtCadSenha1.setText("");
                    txtCadSenha2.setText("");
                    txtCadLogin.setText("");
                    txtCadNome.setText("");
                    txtTelefone.setText("");
                    atualizatbUsuarios();
                }else{
                JOptionPane.showMessageDialog(this, "Senhas não Conferem!");
                }
                } 
        } else {
             if (cadSenha1.equals(cadSenha2) && !cadSenha1.isEmpty()) {
                mod.setNome(txtCadNome.getText());
                mod.setLogin(txtCadLogin.getText());
                mod.setSenha(txtCadSenha1.getText());
                mod.setFuncao("Usuário");
                mod.setTelefone(txtTelefone.getText());
                mod.setTipo(jComboTipo.getSelectedItem().toString());
                cont.salvar(mod);
                txtCadLogin.setText("");
                txtCadNome.setText("");
                txtCadSenha1.setText("");
                txtCadSenha2.setText("");
                txtTelefone.setText("");
                JOptionPane.showMessageDialog(null, "Dados Salvos!");
                atualizatbUsuarios();
            } else {
                txtCadSenha1.setText("");
                txtCadSenha2.setText("");
                JOptionPane.showMessageDialog(null, "Senhas não conferem");
            }

o dao de pesquisa:

public BeansUsuario busca(BeansUsuario mod) {
    conex.AccederBD();
    
    try {
        conex.executaSql("select *from USUARIOS where NOME like'%" + mod.getPesquisa() + "%'");
        conex.rs.first();
        mod.setLogin(conex.rs.getString("LOGIN"));
        mod.setNome(conex.rs.getString("NOME"));
        mod.setFuncao(conex.rs.getString("FUNCAO"));
        mod.setTelefone(conex.rs.getString("TELEFONE"));
        mod.setId(conex.rs.getInt("ID"));

    } catch (SQLException ex) {
        
    }

    conex.cerracon();
    return mod;

}

16 Respostas

Rodrigo_Void

Olá, posta um print da tela, fica mais claro de entender o contexto.
Eu não faria a pergunta e nem esta busca, pq pelo que me parece vc compara o nome pra ver se altera ou insere, mas e se foi alterado outra informação? Vc pode usar o ID do registro pra isso, caso tenha ID altera, do contrario insere. Eu ainda trocaria o label do botão pra informar o usuário se vai inserir ou alterar.

Jonathan_Medeiros

O certo é você comparar o ID da pessoa e não o nome, pois existem várias pessoas com o nome idêntico, e nesse caso não teria como você saber quem é quem.

Pegando pelo ID, a ideia é simples, se a pessoa tem ID é alteração, se não tem ID é inclusão.

magnnos

mas o novo nome não tem id…

Jonathan_Medeiros

Logicamente não vai ter, então neste caso é uma inclusão!

Pegou a ideia ?

magnnos

mas eu tentei alterar pra comparar o id, tipo se o id >0 ou enfim, e mantem o erro… ele “congela” e da erro no netbeans, erro de consulta

magnnos

Gostei da ideia do label!

magnnos

sim sim, eu ja tentei!! ele da erro na consulta, dis que um null não pode ser comparado…

magnnos

sobre a ideia do label como faço pra alterar assim que for escrito o nome, um listener ne isso?

Jonathan_Medeiros

Sim, é porque você não tem o ID ainda, você deve incluir a pessoa nesse caso e gerar um ID pra ela.

Pra ficar mais fácil de você entender, porque acho que você está perdido!
Olha, você pode realizar a consulta a partir do Número de CPF ou CNPJ da pessoa, que são dados únicos, caso o CPF e CNPJ já exista no banco, então você realiza uma alteração!
Se não existir então você insere o registro.

Clareou a ideia ?

magnnos

mestre, isso eu já intendi, o problema é que quando eu faço o

if (resultadoDaPesquisa.equals(valorcomparado);

ele retorna um erro dizendo que null não pode ser comparado ja tentei com id:

if(resultadoID >0);

e nada…

Rodrigo_Void

Mas por que vc faz uma consulta?
Geralmente se procura trabalhar com padrão OO, logo vc tem um objeto Pessoa, com todos seus atributos, inclusive o ID.
Se está a criar um registro novo, este ID é zero ou NULL, de contrário, se estas editando ele possui um valor, é só fazer um IF nisso, nunca precisei consultar banco para saber se edito ou incluo, isso é ineficiente.

Jonathan_Medeiros

Você ainda não entendeu o que eu quis dizer!

Vou explicar melhor:

public boolean seuMetodoDePesquisa(String CPF_CNPJ) {
     //escreve aqui o sql de consulta de pessoa comparando WHERE CPF_CNPJ = 'valor recebido por parâmetro';
     //executa a consulta de pessoa e preenche o resultset

    if (!resultset.first()) { //testa o resultset pra saber se existe a pessoa ou não
       return false; //retorno é false caso não exista a pessoa
    }
  return true; // retorno é true caso exista a pessoa
}

Agora sim, você pega esse resultado e faz o que você estava fazendo!

if (seuMetodoDePesquisa("aqui você informa o CPF ou CNPJ")) { //Testa se o retorno é true ou false
   //Se é true significa que a pessoa já tem cadastro, então realize a ATUALIZAÇÃO
} else {
  //Se for false significa que a pessoa não tem cadastro, então realize o CADASTRO
}

Compreendeu melhor agora o que eu disse ?
você analisa pelo retorno do método!

magnnos

Jonathan_Medeiros

Você tem certeza de que está passando valores corretos para o seu parâmetro id na chamada do método ?
Você chegou a fazer debug para ver se o seu sql está sendo montado corretamente ?

Porque pelo seu código o que me parece é que o ID não está sendo carregado no momento em que você monta sua string SQL, por isso acontece o NullPointerException.

Observação: Você não precisa declarar uma variável dentro do método só para fazer o retorno dos valores booleanos, basta dar um return true ou return false conforme no exemplo que te mandei na resposta anterior.

magnnos

o problema não é que o id realmente não existe, eu tento adicionar um novo arquivo, esse teste e se já existe, mas vou resolver assim, um botão alterar e o outro salvar, melhor assim, vlw mesmo men!

Jonathan_Medeiros

Sim amigo, eu te disse isso que você acabou de falar no início deste tópico!
O Amigo @Rodrigo_Void também lhe disse a mesma coisa que te falei, percebe que a solução está toda aqui ?
O problema maior é que você não está sabendo como aplicá-la em seu projeto, como você cita ser iniciante, te recomendaria um pouco mais de estudo sobre a lógica de programação.

Por que o que acontece, quando você tentava realizar a consulta pelo nome da pessoa, logicamente o nome tinha de ser informado para que a pesquisa fosse realizada, correto ?
Com o ID não é diferente, você deve fornecer um ID para que a pesquisa seja realizada, caso contrário está incorreto, o que causará um erro!

Mas de qualquer forma, faça da maneira que achar mais fácil de utilizar!

Criado 13 de junho de 2017
Ultima resposta 13 de jun. de 2017
Respostas 16
Participantes 3