Pesquisa ao Banco de dados com Java

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);
    } 
}

Obrigado a todos!

1 curtida

Boa noite cara, tudo bem? Faz assim “select * from tbusuarios where usuario ilike =?”

EDIT *********

Oh cara, no MySQL não tem a função ILIKE, tenta isso:

1 curtida

Beleza Abner ?
Então cara, desculpe a ignorancia, mas seria o correto no meu caso:

select * from tbusuarios where ('LOWER(usuario) LIKE LOWER(?)', "%#{usuario}%")

Obrigado

Da seguinte forma funciona, por causa do sinal de porcetagem conatenado ao final:

pst.setString(1, txtUsuNome.getText()+"%");

Mas aconselho pegar o valor por parametro.

Beleza Lucas?
Então cara, não funcionou. Você diz só alterar o “%” ?
Porque colocando somente isso não achou nenhum usuário

Você esta usando aspas duplas mesmos?
Porque o correto é usar aspas simples.

Sim, usei aspas simples mesmo… ele me retorna a seguinte exception:

java.sql.SQLException: Parameter index out of range (1> number of parameters, which is 0).
 select * from tbusuarios where usuario LIKE LOWER('?%')

Agora assim, é melhor gravar ou tudo maiusculo ou minusculo porque o LIKE não encontra quando tá misturado maisculo com minúsculo;

Apresentou o mesmo erro man :frowning:

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 ? "

        txtUsuFone.setText(rs.getString(1));
        txtUsuLogin.setText(rs.getString(2));
        txtUsuSenha.setText(rs.getString(3));
        cboUsuSexo.setSelectedItem(rs.getString(4));
        cboUsuPerfil.setSelectedItem(rs.getString(5));
        txtUsuEmail.setText(rs.getString(6));

e coloca um finally para fechar a conexão com o banco

1 curtida

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 * ?

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.

2 curtidas

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.

1 curtida

Show Lucas! Sensacional! Obrigado pela clareza na explicação!
Já alterei no código :grinning:

1 curtida

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 ?

isso mesmo

1 curtida