Problema Select

12 respostas
J

Boa tarde…

Estou desenvolvendo uma pagina web em jsf, onde há um opção que a pessoa digita o nome do produto e apareça as produtos similares.

Porém, na minha consulta, não estou conseguindo tratar…

Por exeplo: no meu banco a o produto Dice, se a pessoa procurar por dice, ou red dice, não consigo localizar…

segue abaixo minha consulta:

[b]public ArrayList localizaProduto(String nome) throws IllegalAccessException, InstantiationException, SQLException{

Conexao conexao = new Conexao();
	Connection conn = conexao.getConexao();
	
	PreparedStatement pst = conn.prepareStatement("select * from produto where nome like ?");
	pst.setString(1, nome);
	
	ResultSet rs = pst.executeQuery();
	
	ArrayList<Produto> lista = new ArrayList<Produto>();
	
	while (rs.next()) {
		
		Produto p = new Produto();
		
		p.setCategoria(rs.getString("CATEGORIA"));
		p.setCodigo(rs.getString("CD_PRODUTO"));
		p.setDescricao(rs.getString("DESCRICAO"));
		p.setFigura(rs.getString("FIGURA"));
		p.setNome(rs.getString("NOME"));
		
		lista.add(p);
		
	}	
           
            return lista;

}[/b]

Isso ocorre porque no like não atribui os %, e dessa forma:
select * from produto where nome like %?%
Dá erro!

Alguém pode me dar uma luz? :stuck_out_tongue:

Desde já, agradeço!

12 Respostas

C

Boa tarde

A algum tempo tive esse problema, consegui resolver adicionando o sinal de % no valor atribuido ao preparedStatement.

Você precisa colocar dessa forma:

pst.setString(1, nome+"%");

Até mais.

renanreismartins

por favor leiam isso…

http://www.guj.com.br/posts/list/50115.java

atençao para como postar codigo…

abraços

V

Coloca na mão como o caio disse, no seu caso é dessa forma:

pst.setString(1, "%"+nome+"%");
J

Poxa, é isso mesmo, muito obrigada!

E sobre a palavra começar com a primeira maiuscula?

no BD está Dice
mas se eu pesquisar por dice não acho!

eduardoromcy

Tenta Assim:

like upper("%"+nome+"%")
J

não, dessa forma não traz nada!

M

se for no mysql acho que a instrução pra deixar tudo maiusculo é UCASE.

eduardoromcy

Acredito que não conseguiu usar o exemplo, vou mandar outro abaixo:

select * from tabela_usuario where coluna_login like upper("%edu%")

Detalhe, funciona perfeitamente em MYSQL, testado e aprovado.

Boa sorte. :wink:

V

Qual banco de dados você esta usando?

Se for MYSQL devia funcionar normalmente.
Se for POSTGRES faz assim:

where lower(to_ascii(nome)) like lower(to_ascii(?))

ai você coloca o setString normalmente

pst.setString(1, “%”+nome+"%");

J

é oracle!

CintiaDR
PreparedStatement pst = conn.prepareStatement("select * from produto where lower(nome) like ?");
pst.setString(1, "%" + nome.toLowerCase() + "%");

ou

PreparedStatement pst = conn.prepareStatement("select * from produto where upper(nome) like ?");
pst.setString(1, "%" + nome.toUpperCase() + "%");

Ou muda tudo pra maiúscula ou tudo pra minúscula.

J

Funcionou!

Muito obrigada!

Criado 27 de maio de 2009
Ultima resposta 28 de mai. de 2009
Respostas 12
Participantes 7