Pesquisa em BD

6 respostas
Mitnick8

Estou tentando fazer uma pesquisa em um banco, porém está me retornando os nomes procurados só que com comparados em caixa (alta e baixa) quando eu digito uma palavra minúscula só me encontra as frases escritas em minúsculas mais queria encontrar todas os nomes independente de serem maiúsculas ou minúsculas, alguém pode me ajudar?

tenho o seguinte codigo, o que já me faz uma pesquisa

private void txtPesquisaKeyReleased(java.awt.event.KeyEvent evt) { tabel.preencheTabelaMedicamento(tabela, "select * from medicamentos where med_nome like '" + txtPesquisa.getText() + "%' order by med_nome"); }

6 Respostas

AlexandreGama

Olá Mitnick8!

Uma forma simples é você fazer a comparação com Upper tanto no nome que vem do banco, como no nome que você está passando
como parâmetro:
Poderia ficar algo como:

private void txtPesquisaKeyReleased(java.awt.event.KeyEvent evt) { tabel.preencheTabelaMedicamento(tabela, "select * from medicamentos where upper(med_nome) like '" + txtPesquisa.getText().toUpperCase() + "%' order by med_nome"); }

Abraços!

kenneth

Fala brow,

Ou você pode usar ilike

... select * from TABELA where CAMPO ilike ALGUMA_COISA

Abraco!

AlexandreGama

Olá kenneth!

Bem lembrado, porém se minha memória não falha este comando é usando em Postgre certo?

Abraços!

Mitnick8

kenneth:
Fala brow,

Ou você pode usar ilike

... select * from TABELA where CAMPO ilike ALGUMA_COISA

Abraco!

kenneth, era exatamente isso que eu queria, funcionou perfeitamente.

AlexandreGama, no seu caso o UpperCase ele estaria pondo tudo em maiúsculo e daria erro mesmo assim quando fosse digitado a segunda letra que está em minúscula.

Obrigado kenneth e AlexandreGama.

kenneth

Fala Alexandre,

Isso mesmo, o ilike é do Postgre.
Se não me engano, no mysql só existe o like, sendo case-insensitive por padrão.

Vi essa informação no manual do MySql (um chm que tenho aqui)

As seguintes instruções mostram que a comparação de strings são caso-insensitivo, a menos que um dos operandos seja uma string binária: 


mysql> SELECT 'abc' LIKE 'ABC';
        -> 1
mysql> SELECT 'abc' LIKE BINARY 'ABC';
        -> 0

Abraço!

AlexandreGama

Legal kenneth!

Na verdade foi este o motivo de eu ter passado o like, dado que é funcional no SQLServer, Firebird, Oracle, MySQL, etc.
Mas bem lembrado! Devo ter usado o ilike somente uma vez de teste.

Lembrando ainda Mitnick8 que sugiro que você tenha uma solução que não contemple vários bancos, assim em uma possível
migração você não precisaria se preocupar com isso, levando em consideração que você precise trabalhar com JDBC puro.
Caso não seja necessário, sugiro que trabalhe com um ORM mesmo.

Abraços!

Criado 8 de novembro de 2010
Ultima resposta 8 de nov. de 2010
Respostas 6
Participantes 3