Boa noite!
Galera, eu fiz um campo de busca no meu sistema pelo nome, porem ele só está pesquisando quando digito EXATAMENTE como está cadastrado no banco, por exemplo, se existe um usuário chamado Leonardo Lovato, o sistema está buscando quando digito exatamente “Leonardo Lovato”, porem gostaria que o sistema buscasse só quando eu digitasse “Leo” por exemplo. Como faço isso ? Atualmente tenho uns 15 usuários cadastrados. Estou utilizando MySql
Vou postar meu código do método consultar().
privatevoidconsultar(){Stringsql="select * from tbusuarios where usuario=?";try{pst=connection.prepareStatement(sql);pst.setString(1,txtUsuNome.getText());rs=pst.executeQuery();if(rs.next()){txtUsuFone.setText(rs.getString(5));txtUsuLogin.setText(rs.getString(3));txtUsuSenha.setText(rs.getString(4));cboUsuSexo.setSelectedItem(rs.getString(7));cboUsuPerfil.setSelectedItem(rs.getString(6));txtUsuEmail.setText(rs.getString(8));}else{JOptionPane.showMessageDialog(null,"Usuário não cadastrado.");// a linha abaixo "limpam" os campostxtUsuNome.setText(null);txtUsuFone.setText(null);txtUsuLogin.setText(null);txtUsuSenha.setText(null);cboUsuSexo.setSelectedItem(null);cboUsuPerfil.setSelectedItem(null);txtUsuEmail.setText(null);}}catch(Exceptione){JOptionPane.showMessageDialog(null,e);}}
Agora assim, é melhor gravar ou tudo maiusculo ou minusculo porque o LIKE não encontra quando tá misturado maisculo com minúsculo;
L
L.Lovato
Apresentou o mesmo erro man
M
marco_aurelioo1 like
Tenta:
“select * from tbusuarios where usuario like ? “
depois seta o valor como pst.setString(1,”%”+txtUsuNome.getText()+"%");
Outrodetalhe:sobreapartequevocêsetaosvalores:txtUsuFone.setText(rs.getString(5));txtUsuLogin.setText(rs.getString(3));txtUsuSenha.setText(rs.getString(4));cboUsuSexo.setSelectedItem(rs.getString(7));cboUsuPerfil.setSelectedItem(rs.getString(6));txtUsuEmail.setText(rs.getString(8));oidealseriavcpegardobancoocampoespecificoquevocêquer:"select fone,usu_login,senha,sexo,usu_perfil,email from tbusuarios where usuario like ? "
e coloca um finally para fechar a conexão com o banco
L
L.Lovato
Booooooa Marco! Sensacional cara, muito obrigado…
Falta só mais uns ajustes, porem não consegui entender a lógica. Olhe só:
Quando digito “San” no campo de busca, ele me retorna os dados do usuário “Sandra”, até então está correto. Porem, quando coloco somente o “S”, ele me retora um usuário “Jose”, por que será ? Será que é porque o “José” está cadastrado primeiro do que a “Sandra”?
E me desculpe, não entendi o que você disse que é ideal. Esse método é uma consulta, então eu não teria que solicitar todos? Logo, posso dar um select * ?
L
Solucao aceita
lucas.sampaio2 likes
Porque o seguinte: O % traz qualquer letra antes antes de ‘S’ (seguindo o exemplo de Sandra) se tiver no começo da palavra e depois da palavra traz tudo o que vem depois de ‘S’.
Então se tiver getString()+"%" vai trazer tudo o que vem depois de ‘S’ (ainda seguindo o exemplo de Sandra). Ficaria S*, onde o asterisco é qualquer coisa.
Ou se tiver "%"+getString()+"%" vai trazer tudo o que vem antes e depois de ‘S’ (ainda seguindo o exemplo de Sandra). Ficaria *S*, onde o asterisco é qualquer coisa.
Como você definiu "%"+getString()+"%" e Jose tem o S de Sandra a busca vai trazer Jose.
M
marco_aurelioo1 like
Especificando quais campos vc quer buscar no banco fica mais leve a busca das informações.
Sendo mais objetivo a quantidade de informação que vem do banco não é desperdiçada, pensa nisso quando vc pede select * vc esta dizendo me traz todos os campos desta tabela, o banco vai te enviar todas e você não vai usar … desperdício o banco processou a informação a rede trafegou a informação e você jogou fora … recurso de maquina é caro e sua aplicação fica melhor se usar bem isso.
L
L.Lovato1 like
Show Lucas! Sensacional! Obrigado pela clareza na explicação!
Já alterei no código
L
L.Lovato
Entendi Marco! Então no meu caso eu evitaria que ele trouxesse o iduser, correto ? porque todas outras colunas estou usando na minha consulta, como: usuario, login, senha, telefone, perfil, sexo, email, correto ?