Problema com Verificação de dados no Banco durante o Cadastro.. [ RESOLVIDO ]

Boa noite galera, tenho um botão aqui que contem um evento de cadastrar um contato, dentro desse evento eu chamei um método que recebe como parametro o nome digitado do TextField() e verifica no banco de dados se esse nome ja existe, e retorna true se existir e false caso não exista… Caso seu retorno seja false, ele cadastra no banco,caso seu retorno seja true ele exibe uma mensagem… Mas não ta dando certo, o nome existindo ou não no banco de dados ele continua cadastrando…será o que está havendo de errado???
Vo postar o método que verifica se o nome ja existe, e o botão que contem o evento de cadastrar… Obrigado!! :slight_smile:

MÉTODO QUE VERIFICA SE O NOME JA EXISTE O BANCO DE DADOS

private boolean verificarNome(String nome) throws SQLException{

        int aux = 0;
        ContatoNegocio cont = new ContatoNegocio();
        List<Contato> lista = cont.listarContato();

        for(Contato conn : lista){
            if(nome == conn.getNome()){
                aux++;
            }
        }
       
        if( aux > 0){
            return true;
         }else{
            return false;
         }
        
    }

BOTÃO QUE CONTEM O EVENTO DE CADASTRAR UM CONTATO NO BANCO

private void bt_cadastrarActionPerformed(java.awt.event.ActionEvent evt) {                                             
        
            if ((evt.getSource() == bt_cadastrar) && (verificarDados())) {
                
                ContatoNegocio cont = new ContatoNegocio();
                ContatoTableModel modelo = (ContatoTableModel) tabela.getModel();
                contatoDAO dao = new contatoDAO();

                
                // Contato Criado para utilizar no tablemodel, para que ele
                    // possa indentificar o novo contato
                    Contato contato = new Contato(tf_nome.getText(), tf_idade.getText(), tf_telefone.getText());
            try {
                if (verificarNome(contato.getNome())) {
                    JOptionPane.showMessageDialog(null, "Contato já existente no Banco de Dados");
                } else{
                    cont.cadastrarContato(contato.getNome(), contato.getIdade(), contato.getTelefone());
                    int num = dao.buscaID(contato.getNome());
                    contato.setIdusuario(num);
                    modelo.add(contato);
                    limparCampos();
                }
            } catch (SQLException ex) {
                Logger.getLogger(ContatoFrame.class.getName()).log(Level.SEVERE, null, ex);
            }

            }
    }                                

Boa madrugada galera,

Tente trocar

if(nome == conn.getNome()){

por

if(nome.equals(conn.getNome())){

[]s

Faz como o zeed01 disse, usa o equals para testar a igualdade.

e pode fazer assim:

 private boolean verificarNome(String nome) throws SQLException{  
   
         boolean result = false;
         ContatoNegocio cont = new ContatoNegocio();  
         List<Contato> lista = cont.listarContato();  
   
         for(Contato conn : lista){  
             if( nome.equals(conn.getNome()) ) {  
                 result = true;
		                    break;  
             }  
         }  
         
         return result;            
     } 

dai não precisa fazer aquele teste do if (aus > 0) …
Pq se vc tiver pelo menos 1 nome igual, não precisa mais percorrer a lista, então usando o break, o for é cancelado quando encontrar um nome igual.

Vlw Zeed01, perfeito deu certinho… eu tinha esquecido que comparação de String se fazia como método equals()
Só uma coisa, a lógica do meu método de verificar ta certo???

[quote=romarcio]Faz como o zeed01 disse, usa o equals para testar a igualdade.

e pode fazer assim:

 private boolean verificarNome(String nome) throws SQLException{  
   
         boolean result = false;
         ContatoNegocio cont = new ContatoNegocio();  
         List<Contato> lista = cont.listarContato();  
   
         for(Contato conn : lista){  
             if( nome.equals(conn.getNome()) ) {  
                 result = true;
		                    break;  
             }  
         }  
         
         return result;            
     } 

dai não precisa fazer aquele teste do if (aus > 0) …
Pq se vc tiver pelo menos 1 nome igual, não precisa mais percorrer a lista, então usando o break, o for é cancelado quando encontrar um nome igual.[/quote]
Vou testar sua suloção aqui…

Vlw romarcio , deu certo sua sugestão… :mrgreen: