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!