PreparedStatement com cláusula IN

6 respostas
gugaa_df

Pessoal, tenho uma coluna do tipo Integer no banco e gostaria de executar um select utilizando a cláusula IN para essa coluna.
o select seria algo do tipo:

select count(*)as total " +
 "from tabela aut " +
"where aut.estadot in(?) " +

gostaria de utilizar algo do tipo
preparedStatement.setInt(1, lista);

alguém sabe como utilizar?

6 Respostas

zoren

o setArray não funciona??

gugaa_df

Voçê teria algum exemplo?
talvez resolva…

a.moraissoares

Se eu entendi, vc tem uma lista não estática de valores.
Isso aqui não funciona?

select count(*) as total from tabela aut where aut.estadot in("aqui dentro você faz um loop pra colocar as interrogações de acordo com a lista.size()") 

for (int i = 0; i < lista.size(); i++){
     int j = i+1;
     pstmt.setInt(j, lista.get(i));
}
pstmt.execute();
C

A opção do Array é dependente de banco. Sei disso pq qndo pensei em usar isso, vi que no Oracle vc tem que criar o objeto oracle.sql.ARRAY no braço e colocar no PS.
A opção do IN com várias entradas TAMBÉM depende do banco. Tipo, no Oracle só podem ser colocador 1000 elementos no IN. Se for fazer algo assim, esteja preparado pra fazer algo assim:

... and (coluna IN([i]mil valores aqui[/i]) or coluna IN ([i]outros mil valores aqui[/i]))
zoren

No JPA ele converte pra valores com virgula e substitui sozinho pelo parâmetro

E

http://forums.oracle.com/forums/thread.jspa?messageID=3478142

Isso quer dizer que conforme a implementação do JPA o IN é substituído adequadamente ou não. Segundo o pessoal da Oracle, se você estiver usando o TopLink Essentials, eles não fazem isso.

Criado 21 de setembro de 2009
Ultima resposta 21 de set. de 2009
Respostas 6
Participantes 5