Alguem sabe como utilizar PreparedStatement para querys que utilizam “in”?
Tipo:
SELECT * FROM FUNCIONARIO WHERE ID IN (?,?,?,?)
isto funciona bem??
Alguem sabe como utilizar PreparedStatement para querys que utilizam “in”?
Tipo:
SELECT * FROM FUNCIONARIO WHERE ID IN (?,?,?,?)
isto funciona bem??
já tentou fazer:
ps.setInt(1,80);
ps.setInt(2,100);
ps.setInt(3,110);
ps.setInt(4,255);
abração
Funciona, claro.
Rafael
Agora surgiu outra duvida
e se for apenas uma interrogação e o usuário passar um arrayList
ArrayList ids = new ArrayList()
ids.add("func1");
ids.add("func2");
Funcionarios getFuncionarios(ArrayList array) {
String sql = "select * from funcionario where id in (?) ";
prepared = conn.prepareStatement(sql);
prepared.setObject(array);
}
Gostaria de montar algo deste tipo…
alguem tem alguma idéia??
Abraço
Monte a query dinamicamente:
StringBuffer sql = new StringBuffer("select * from funcionario where id in (");
int size = ids.size();
for (int i = 0; i < size - 1; i++) {
sql.append("?,");
}
sql.append("?)");
PreparedStatement p = conn.prepareStatement(sql.toString());
for (Iterator iter = ids.iterator(); iter.hasNext(); ) {
// Pega os dados do ArrayList e chame p.setXxx()
}
Rafael
hehehe eu queria não ter que montar a query dinamicamente…
Mas pelo visto vou ter q fazer.
Valeu pessoal!
Só uma possível melhoria:
StringBuffer sql = new StringBuffer("select * from funcionario where id in (");
for (Iterator it = ids.iterator();it.hasNext();) {
sql.append("?");
if(it.hasNext())sql.append(", ");
}
PreparedStatement p = conn.prepareStatement(sql.toString());
for (Iterator iter = ids.iterator(); iter.hasNext(); ) {
// Pega os dados do ArrayList e chame p.setXxx()
}
E ainda dah para melhorar mais(usando o Tiger-J2SE 5.0):
StringBuilder sql = new StringBuilder("select * from funcionario where id in (");
ArrayList<Integer> ids = new ArrayList<Integer>();
for (Integer i : ids)
sql.append("?");
{ blablabla... }

Só uma possível melhoria:StringBuffer sql = new StringBuffer("select * from funcionario where id in ("); for (Iterator it = ids.iterator();it.hasNext();) { sql.append("?"); if(it.hasNext())sql.append(", "); } PreparedStatement p = conn.prepareStatement(sql.toString()); for (Iterator iter = ids.iterator(); iter.hasNext(); ) { // Pega os dados do ArrayList e chame p.setXxx() }
...e fica melhor ainda se você adicione duas linhas de código :mrgreen:
StringBuffer sql = new StringBuffer("select * from funcionario where id in (");
for (Iterator it = ids.iterator();it.hasNext();) {
sql.append("?");
it.next();
if(it.hasNext())sql.append(", ");
}
sql.append(")");
PreparedStatement p = conn.prepareStatement(sql.toString());
for (Iterator iter = ids.iterator(); iter.hasNext(); ) {
// Pega os dados do ArrayList e chame p.setXxx()
}
Pois a falta do it.next() resulta em OutOfMemoryError e a falta de adicionar o ")" ao fim do query resultaria em SQLException.
-Sami
Malditos sejam todos os loops infinitos! (pelo menos os meus :mrgreen: )
Valeu galera eu tava pensando em colocar as colunas tbm dinamicamente, mas achei que ia ficar muito complicado e dificil de manutenir o código com dois loops uma para as colunas e outro para os atributos.
Valeu pessoal!
“manutenir”!!!
aaaaaaaaaaaaaaaaaaaargh 
Prefiro “manter” 
“manutenir”!!!aaaaaaaaaaaaaaaaaaaargh
Prefiro “manter”
![]()
Que seja!! 
Eu prefiro não manter/manutenir
só ficar criando um monte de código impossível de manter/manutenir.
Me chamem de burro.
Estou atrás de um bug de OutOfMemory aqui e, oh! O que eu acho?
Tinha que ter uma ferramenta tipo o lint (ou jlint, ou PMD) que consultasse o GUJ para criticar seu código 
hahaha
boa ideia, Phillip.
-Sami