[RESOLVIDO]JDBC problema com select com IN (?,?,?)

5 respostas
A

seguinte eu tenho uma lista de Integer que serve para armazenar os valores de uma coluna, monto a query de acordo com o tamanho dessa lista e fica mais ou menos assim:

String sql = "SELECT t.codMensagem"
			+ " FROM "
			+	DbBase.getInstance(MensagemBean.class).getNomeTabela() + " t"
			+ " WHERE"
			+ " t.data = ? "
			+ " and "+sqlIn("t.codGrupo", codGrupos)
			+ " and t.siglaJornal = ?"
			+ " and t.edicao = ?";
o método sqlIn:
private String sqlIn(String campo, Collection<?> valores) {
		final int LIMITE = 900;
		StringBuffer buffer = new StringBuffer();
		if (valores.size() > LIMITE) {
			buffer.append('(');
		}
		for (int i = 0; i < valores.size(); i += LIMITE) {
			buffer.append(campo);
			int count = Math.min(LIMITE, valores.size() - i);
			if (count == 1) {
				buffer.append("=?");
			} else {
				buffer.append(" IN(");
				for (int j = 0; j < count; j++) {
					buffer.append("?,");
				}
				buffer.delete(buffer.length() - 1, buffer.length()); // deleta
																		// ultima
																		// ","
				buffer.append(")");
			}

		}

		return buffer.toString();
	}

o que gostaria de saber é como fazer com o PreparedStatement para ele receber mais de um codMensagem

5 Respostas

E

e ae kra!!
já tentou ao invés de “IN” usar “ANY” ??

eu não consegui usar o IN nos meus Selects, uso o ANY e funciona da msm forma…
espero que ajude…
abracow

A

emmanueldsilva:
e ae kra!!
já tentou ao invés de “IN” usar “ANY” ??

eu não consegui usar o IN nos meus Selects, uso o ANY e funciona da msm forma…
espero que ajude…
abracow

valeu pela dica cara… mas a questão não é essa. E sim qual método do PreparedStatement eu uso pra setar os valores desse conjunto de codGrupo, como por ex: PreparedStatement prep = con.prepareStatement(sql); prep.setString(numDoCampo, valorDo?);

como faço esse codigo para um IN

A

Utilize o método correspondente ao tipo de dado no IN.

Por exemplo, para a query:

SELECT * FROM TABELA WHERE ID IN (?,?,?,?)

Considerando que ID é inteiro temos:

ps.setInt(indice++, valor1);
  ps.setInt(indice++, valor2);
  ps.setInt(indice++, valor3);
  ps.setInt(indice++, valor4);

Se fossem String…você usario o método setString… e por aí vai.

Lembre-se que terá que chamar o método para cada valor que estiver na clausula IN.

Kanin_Dragon

Jovem,

E impressão minha ou você tentou ir para a lua com um fusca ?

Abs,

A

AbelBueno:
Utilize o método correspondente ao tipo de dado no IN.

Por exemplo, para a query:

SELECT * FROM TABELA WHERE ID IN (?,?,?,?)

Considerando que ID é inteiro temos:

ps.setInt(indice++, valor1);
  ps.setInt(indice++, valor2);
  ps.setInt(indice++, valor3);
  ps.setInt(indice++, valor4);

Se fossem String…você usario o método setString… e por aí vai.

Lembre-se que terá que chamar o método para cada valor que estiver na clausula IN.

Ok resolvido!!!

Criado 20 de maio de 2011
Ultima resposta 20 de mai. de 2011
Respostas 5
Participantes 4