Setar variavel no Statment com cláusula IN

5 respostas
rcipriani

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?

5 Respostas

thiago.correa

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!

A

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…

rcipriani

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…

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

A

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);
thiago.correa

Cara, não cheguei a testar

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 é  alegria 
		return o;
	}
Criado 27 de setembro de 2010
Ultima resposta 27 de set. de 2010
Respostas 5
Participantes 3