Setar variavel no Statment com cláusula IN

Alguém sabe como faz isso?

Ex.:


//quero que fique assim
//String sql = "SELECT * FROM clientes IN ('1','5','8') ";
String sql = "SELECT * FROM clientes IN (?) ";

pst = this.getConnection().prepareStatement(sql);

String minhaStr = "'1','5','8'";

pst.set????(1,minhaStr);

E ai?

Eheheh, teria que ser um bind para cada opção do in! e depois chamar a quantidade de vezes necessária os métodos para setar os valores!

aliás…que banco está utilizando?

repare que aumentando o números de ? na sua query, você perde o hard-parsing que alguns bancos fazem em queries parametrizadas.

geralmente isto não é problema, mas se tiver uma query em que esta etapa demora mais que a soft-parsing, você tem uma perda de performance visível…

[quote=AbelBueno]aliás…que banco está utilizando?

repare que aumentando o números de ? na sua query, você perde o hard-parsing que alguns bancos fazem em queries parametrizadas.

geralmente isto não é problema, mas se tiver uma query em que esta etapa demora mais que a soft-parsing, você tem uma perda de performance visível…[/quote]

Então, por enquanto é MySQL, mas pode ser que mude pra postgree…

por enquanto to fazendo assim:


String minhaStr = "'1','5','8'";

//quero que fique assim
//String sql = "SELECT * FROM clientes IN ('1','5','8') ";
String sql = "SELECT * FROM clientes IN ("+minhaStr+") ";

pst = this.getConnection().prepareStatement(sql);

//pst.set????(1,minhaStr);

Parece ser o geito

na verdade o jeito é:

String sql = "SELECT * FROM clientes IN (?,?,?) ";  
pst = this.getConnection().prepareStatement(sql); 
pst.setString(1, valor1);
pst.setString(2, valor2);
pst.setString(3, valor3);

Cara, não cheguei a testar

[code]
public Object listar(int[] param) {
String select = “select * from tchananan where tralala in (”;
for (int i = 0; i < param.length; i++) {
select += “?”;
if ( i != (param.length - 1)) {
select += “,”;
}
}
select += “)”;
PreparedStatement pst = this.getConnection().prepareStatement(select);
for (int i = 0; i < param.length; i++) {
pst.setInt(i+1, param[i]);
}

	//faz a colsulta e depois é só alegria 
	return o;
}[/code]