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

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;

}

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.

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.

mas o novo nome não tem id…

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

Pegou a ideia ?

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

Gostei da ideia do label!

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

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

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 ?

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…

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.

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!

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.

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!

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!