Ajuda com O botão pesquisar do meu código [RESOLVIDO]

11 respostas
J

E ai pessoal, Tudo bem?

Bom... Espero que alguém possa me ajudar (é um obstáculo bem simples, porém ainda não encontrei resposta)

Estou com o seguinte problema.
Tenho uma aplicação desktop que o botão pesquisar até o momento faz o serviço dele perfeitamente. porém este serviço é feito com a String nome( ele pesquisa pelo nome) e eu queria que além do nome, ele pesquisasse pelo celular e também pelo Telefone fixo (por estes 3 meios)

Gostaria que alguém me informasse e apresentasse uma linha de código onde é usado o botão pesquisar com 3 meios de pesquisa.

Se servir de ajuda, vai algumas informações:

Meu Banco é MySQL:

O código Fonte do botão pesquisar é esta aqui:
try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn =  DriverManager.getConnection("jdbc:mysql://localhost:***/***", "****", "********");
            String sql = "SELECT * FROM cadastrados WHERE nome LIKE ?";
            PreparedStatement stm;
            stm = conn.prepareStatement(sql);        
            stm.setString(1, txtnome.getText() + "%");
            ResultSet rs;        
        rs = stm.executeQuery();        
        DefaultTableModel model = (DefaultTableModel) tabela.getModel();        
        model.setNumRows(0);        
        while(rs.next()){
          model.addRow(
                  new Object[]{
                       rs.getString("id"),
                       rs.getString("nome"), 
                       rs.getString("endereco"), 
                       rs.getString("complemento"),
                       rs.getString("numero"),
                       rs.getString("bairro"),
                       rs.getString("fixo"),
                       rs.getString("celular")});
                  
                  }
        
    } catch (ClassNotFoundException ex) {
      JOptionPane.showMessageDialog(null, "Não foi possivel encontrar a class MySQL");
    } catch (SQLException ex){
      JOptionPane.showMessageDialog(null, "Erro de SQL" + ex.getMessage());
    }

Espero que possam me ajudar.

Obrigado

11 Respostas

michetti

where nome like ? and telefone = ? and celular = ?

Simples…

J

Eu fiz o que vc disse michetti. porém deu erro de parâmetro:

Erro SQLNo value specified for parameter 2.

Eu sei que é coisa besta e bem simples, até sua resposta imaginei que fosse algo simples. Porém faz um tempo que não mexo no java que algumas coisas me fogem da mente.

Obrigado pela 1ª Ajuda.

michetti

Pergunta básica…

Você fez esta parte também ??

stm.setString(2, CELULAR); stm.setString(3, TELEFONE);

Pois este erro fala que você exige valores na consulta e não passou valores para o parâmetro 2 e possivelmente o 3.
Se não fez a parte que citei acima faça e teste…

J

Sim, Sim, eu já o tinha feito, porém quando eu o coloco, ele não busca nada, nem dá erro, eu aperto em pesquisar e não aparece nada.

Desculpe a minha falta de conhecimento, sou universitário ainda e um tempão não mexo com java.

michetti

Posta o código do botão com as modificações que eu te falei para fazer.

J
try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn =  DriverManager.getConnection("jdbc:mysql://localhost:***/***", "****", "***");
            String sql = "SELECT * FROM cadastrados WHERE nome LIKE ? and fixo = ? and celular = ?";
            PreparedStatement stm;
            stm = conn.prepareStatement(sql);        
            stm.setString(1, txtnome.getText() + "%");
            stm.setString(2, txtfixo.getText() + "%");
            stm.setString(3, txtcel1.getText() + "%");
            
            ResultSet rs;        
        rs = stm.executeQuery();        
        DefaultTableModel model = (DefaultTableModel) tabela.getModel();        
        model.setNumRows(0);        
        while(rs.next()){
          model.addRow(
                  new Object[]{
                       rs.getString("id"),
                       rs.getString("nome"), 
                       rs.getString("endereco"), 
                       rs.getString("complemento"),
                       rs.getString("numero"),
                       rs.getString("bairro"),
                       rs.getString("fixo"),
                       rs.getString("celular")});
                  
                  }
        
    } catch (ClassNotFoundException ex) {
      JOptionPane.showMessageDialog(null, "Não foi possivel encontrar a class MySQL");
    } catch (SQLException ex){
      JOptionPane.showMessageDialog(null, "Erro de SQL" + ex.getMessage());
    }

Está aqui

michetti

Então cara… por que você ta passando telefone.getText() + “%” ???

stm.setString(2, txtfixo.getText() + "%"); stm.setString(3, txtcel1.getText() + "%");

Neste caso você precisa somente que o telefone seja exatamente aquele, retire o + “%” do 2 e 3

J

já o retirei, e infelizmente ainda não funfou, está difícil fazer isto funcionar eu acho!!! antigamente eu tinha feita um botão para cada e pegava tranquilamente, só q agora quero fazer as 3 pesquisas no mesmo botão. E está difícil.

Quando eu clico no botão pesquisar depois de colocar os dados em algum dos 3 campos,ele não funfa.

não aparece nada e a tabela onde tinha que aparecer os dados fica em branco.

Não sei se ajuda, mas quando eu deixo somente o nome ele funfa direitinho, somente quando acrescento o cel e o fixo que ele não compila.

Pode ser erro no parâmetro?

michetti

Tipo para este comando funcionar você precisa passar os 3 valores ao mesmo tempo, se por exemplo você ao clicar no botão 1 passa somente 1 dos 3 parametros vai dar erro, você pode fazer o seguinte.
Mesmo crendo que não seja a melhor solução. rsrs

Ex:

então

if(!telefone.getText().trim().isEmpty()) // o ! faz com que seja ao contrario ou seja o if está conferindo se o campo telefone é diferente de nulo
String sql = "SELECT * FROM cadastrados WHERE nome LIKE ? and fixo = ?";
} else if ( !celular.getText().trim.isEmpty()){

String sql = "SELECT * FROM cadastrados WHERE nome LIKE ? and celular = ?";

}

Testa ai rsrs

J

Consegui resolver o Problema.

É bem simples.

Somente mudei esta linha de código

String sql = "SELECT * FROM cadastrados WHERE nome LIKE ? and fixo LIKE ? and celular LIKE ?";

Tinha que somente deixar todos como LIKE. Fiz isto e resolveu.

Lógico coloquei os parâmetros que vc me indicou.

Muito obrigado pela ajuda, realmente vc ajudou muito.

Com os erros que aprendemos, e com o aprendizado que se adquire o melhor conhecimento.

Abraços

michetti

Tipo teoricamente dizendo isto é meio errado pois a função do LIKE dependendo do jeito que o use é para pegar valores que começem, terminem, contem, etc… e no seu caso você passa o valor exato, mas já que funcionou rsrs

Editar o tópico ai para [RESOLVIDO]

Criado 15 de fevereiro de 2014
Ultima resposta 15 de fev. de 2014
Respostas 11
Participantes 2