Dúvida - Like no preparedStatement

9 respostas
Gabriel_Tom

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!

9 Respostas

Tchello

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.

Victor_Neves

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()+"%' ");
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…

Victor_Neves

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

rodrigo.bossini

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

Thiago_Kverna

[quote=Tchello]

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…

É, 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

Tchello

[quote=Thiago_Kverna]

Tchello:
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…

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

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.

Tchello

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!

Gabriel_Tom

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!

Criado 9 de abril de 2010
Ultima resposta 10 de abr. de 2010
Respostas 9
Participantes 5