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?
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?
Coloque entre aspas simples:
sql.append(" AND nome_usuario LIKE '%' ? '%'");
ps: nao testei 
Vish não rolou!!
o Sinal de “%” some
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 + "%");
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
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 +"%");
O pessoal ta rápido hoje, :lol:
sql.append(" AND nome_usuario LIKE '% ? %' ");
Cara testa assim e me avisa se deu certo.
Abraços
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
Vc testou assim?
ps.setString(index++, "'%'" + search.getNomeUsuario() + "'%'");
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]
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 + "%");
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.
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]
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.
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() + "%");
Mas fazendo dessa forma você cria oportunidades para sua aplicação sofrer sql injection… Aconselho você a mudar…
põe [Resolvido] aí 
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.
Ops, não tinha percebido… foi mal…