% na String

19 respostas
brunobuild

Pessoal Eu imagino que seja um acoisa bem besta, mas…

Estou usando JDBC, estou criando a minha query em um Stringbuffer.

sql.append(" AND nome_usuario LIKE % ? %");

Mas os “%” estão saindo, porque isso acontece?

19 Respostas

W

Coloque entre aspas simples:

sql.append(" AND nome_usuario LIKE '%' ? '%'");

ps: nao testei :wink:

brunobuild

:cry: Vish não rolou!!

o Sinal de “%” some

Eric_Yuzo

Isso acontece porque o ? representa o que vai ter dentro das aspas na query. O sinal de porcentagem deve ser especificado no método setString.

sql.append(" AND nome_usuario LIKE ?"); . . . statement.setString(x, "%" + suaString + "%");

W

Vc pode tirar o sinal % da query e passar ele ja no parametro. Eu faço isso qdo uso hibernate aqui e funfa de boa

Edit: Já responderam isso hahaha

dssimao

Cara acho que assim funciona:

sql.append(" AND nome_usuario LIKE ?");

E quando você for atribuir os valores você coloca os %:

preparedStatement.setString(1,"%" + seu_valor +"%");
dssimao

O pessoal ta rápido hoje, :lol:

Lucas_Rinaldi
sql.append(" AND nome_usuario LIKE '% ? %' ");

Cara testa assim e me avisa se deu certo.

Abraços

brunobuild

Não rolou em nenhum desses jeitos.

nomeUsuario = B (está com o valor B)

Será que o % é algum sinal reservado? eu tentei fazer % mas não deixa;

ps.setString(index++, "%" + search.getNomeUsuario() + "%");

PreparedStatement final da query

FROM usuario_view WHERE nome_usuario LIKE 'B' ORDER BY nome_usuario

PS: wwsdley do seu jeito também não funcionou

lucas_carvalho100

Vc testou assim?

ps.setString(index++, "'%'" + search.getNomeUsuario() + "'%'");
drigo.angelo

Qual é o sgbd?

Tem alguns que você deve por parêntesis no LIKE, tipo

AND nome_usuario LIKE ('A%') --Usuários cujo nome inicia em A...

Ou

ps.setString(index++, "'%" + search.getNomeUsuario() + "%'");

[size=9][color=yellow]
Se o “%” continuar sumindo, tenta reiniciar o pc, benzer com folhas de arruda… ta mt estranho v-v[/color][/size]

Eric_Yuzo

Não sei não. O preparedStatement já adiciona as aspas quando se chama o setString.

Como que foi criada a statement? Acho que assim deveria funcionar:

String nome = "B"; String sql = "SELECT * FROM usuario_view WHERE nome_usuario LIKE ? ORDER BY nome_usuario"; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, "%" + nome + "%");

brunobuild

Galera acho que eu que to fazendo “arte”.

Eu dei uns enters nas linhas e debuguei.

O debug está caindo na linha que não tem nada escrito acho que tem alguma.

Reinstalei o tomcat mas continua acontecendo a mesma coisa.

drigo.angelo

Da um clean/dist, limpar/construir, publish, sei lá (depende da IDE) mas bem provável de estar faltando isso hehe

[size=9][color=white]se bem que ainda sugiro benzer com folhas de arruda e sal grosso [brincadeira, sal grosso não][/color][/size]

A

O que você chama de não funcionar?

Tá dando algum erro? A consulta não está trazendo resultados?

Experimente pegar a consulta e rodar diretamente no banco (substituindo o ? pelo valor procurado, claro).
As vezes pode estar com texto em minusculo…está digitando um valor que não existe na consulta…

O jeito que o Eric Yuzo postou, funciona sim.

brunobuild

Galera muito obrigado pela ajuda de vocês…

Falha minha!!!

Essa query está dentro de um jar e eu estava esquecendo de atualizar o mesmo no projeto.

Para concluir o Tópico.

O Modo em que eu optei e funcionou foi.

ps.setString(index++,"%" + search.getNomeUsuario() + "%");
lucas_carvalho100

Mas fazendo dessa forma você cria oportunidades para sua aplicação sofrer sql injection… Aconselho você a mudar…

drigo.angelo

põe [Resolvido] aí :stuck_out_tongue:

Eric_Yuzo

Acho que não. Se estivesse usando o Statement e concatenando a query sim. Mas ali está concatenando apenas os sinais de porcentagem ao termo de pequisa. O PreparedStatement trata o que for adicionado como texto.

lucas_carvalho100

Ops, não tinha percebido… foi mal…

Criado 7 de janeiro de 2011
Ultima resposta 7 de jan. de 2011
Respostas 19
Participantes 8