Dúvida - Like no preparedStatement

Fala galera, estou tentanto listar todos os nomes de uma tabela que eu digite certa sequencia de caracteres. Por exemplo?: quando eu digitar no meu txtNome “ana”, quero que apareça na minha jtable todos nomes que tenham “ana” no campo nome do bd.

Nesse código está listando somente “ana”.

bancoDados.Comando = bancoDados.Conexao.prepareStatement("select * from cadcliente WHERE nome = ? or cpf = ?");
bancoDados.Comando.setString(1, txtNome.getText());

já tentei usar esse comando aqui e dá erro.

bancoDados.Comando = bancoDados.Conexao.prepareStatement("select * from cadcliente WHERE nome like '%?%' or cpf = ?");

Vlw galera!

Opa, tente dessa maneira:

   1. bancoDados.Comando = bancoDados.Conexao.prepareStatement("select * from cadcliente WHERE nome = ? or cpf = ?");  
   2. bancoDados.Comando.setString(1, "%"+txtNome.getText()+"%");  

Desse modo deve funcionar.

Abraços.

se do jeito que o tchello falou por acaso nao funcionar, tente colocar aspas simples com os porcents… assim:

bancoDados.Comando.setString(1, " '%"+txtNome.getText()+"%' ");

[quote=Der Meister]se do jeito que o tchello falou por acaso nao funcionar, tente colocar aspas simples com os porcents… assim:

bancoDados.Comando.setString(1, " '%"+txtNome.getText()+"%' ");

Cara, acho que não precisa disso nao…

sera que nao depende entao do banco?! oO

eu me lembro de usar assim pra SQL SERVER 2000 la no trabalho!

bom, vamos deixar o cara entao testar a aplicaçao, mas o mais importante acho que ja dissemos a ele, os porcents sao postos no setString, nao na query! =D

O intuito do PreparedStatement, CallableStatement etc é (dentre outros) justamente evitar o uso de aspas na concatenação de strings.

[quote=Tchello][quote=Der Meister]se do jeito que o tchello falou por acaso nao funcionar, tente colocar aspas simples com os porcents… assim:

bancoDados.Comando.setString(1, " '%"+txtNome.getText()+"%' ");

Cara, acho que não precisa disso nao…[/quote]

É, não precisa disso mesmo não… vc ta usando MySQL né… no MySQL eu tenho certeza que funciona…

Eu dou cursos de extensão em JAVA e passei pro pessoal o PreparedStatement justamente pra não precisar desse monte de aspas…

Se eu não me engano vc foi aluno meu…

Só tem que tomar cuidado se houver a possibilidade da pessoa não digitar nada…
eu acho q quando passa “%%” pro like ele num funciona…

Falows

[quote=Thiago_Kverna][quote=Tchello][quote=Der Meister]se do jeito que o tchello falou por acaso nao funcionar, tente colocar aspas simples com os porcents… assim:

bancoDados.Comando.setString(1, " '%"+txtNome.getText()+"%' ");

Cara, acho que não precisa disso nao…[/quote]

É, não precisa disso mesmo não… vc ta usando MySQL né… no MySQL eu tenho certeza que funciona…
[/quote]

Uso Postgres e Oracle, em ambos o comportamento de um ps é o descrito acima(sem as aspas).

Cara, fui não.
Mas vale ressaltar que o uso de PreparedStaments provê muito além de que simplesmente não ter que por as aspas, evita concatenção nojenta de strings, aprimora a segurança (ajudando a evitar sql injections), melhora a legibilidade do código, etc.

Tava esquecendo, mas kavera tem como reduzir o tamanho do seu avatar? Ele ta ocupando quase 1/3 da tela e isso ta deixando a leitura um pouco desconfortável.

vlw cara!

Thiago, fui seu aluno sim, hehe! Muito bom por sinal.

Só lembrando que o código abaixo não tem o LIKE, tem que colocar no lugar do “=” pra funfar.

bancoDados.Comando = bancoDados.Conexao.prepareStatement("select * from cadcliente WHERE nome = ? or cpf = ?"); bancoDados.Comando.setString(1, "%"+txtNome.getText()+"%");

O problema agora é quando vou bscar somente pelo cpf , qndo o txtNome ta em branco lista todos os clientes.

Vlw galera!