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().
private void consultar() {
String sql = "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 campos
txtUsuNome.setText(null);
txtUsuFone.setText(null);
txtUsuLogin.setText(null);
txtUsuSenha.setText(null);
cboUsuSexo.setSelectedItem(null);
cboUsuPerfil.setSelectedItem(null);
txtUsuEmail.setText(null);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
Tenta:
“select * from tbusuarios where usuario like ? “
depois seta o valor como pst.setString(1,”%”+txtUsuNome.getText()+"%");
Outro detalhe:
sobre a parte que você seta os valores:
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));
o ideal seria vc pegar do banco o campo especifico que você quer:
"select fone,usu_login,senha,sexo,usu_perfil,email from tbusuarios where usuario like ? "
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 * ?
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.
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.
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 ?