PreparedStatement com cláusula IN

3 respostas
black_fire

:?: E ai pessoal, como vão as coisas por ai?

Estou tentando fazer um PreparedStatement, em uma query com a cláusula in, alguém por ai já usou isso?

Um grande abraço para todos e qualquer ajuda é bem vinda! :wink:

Estou querendo fazer uma coisa mais ou menos assim:
String qry = 
			"select * \n" +
			"from \n" +
			"  tabela, \n" +
			"where \n" +
			"  coluna in (?)";
		
		try {
			Class.forName("org.postgresql.Driver");
			Connection conn = DriverManager.getConnection("jdbc:postgresql://192.107.14.144:5432/desenv?charSet=UTF-8","postgres","senha");
			PreparedStatement st = conn.prepareStatement(qry);


			//  **********************************
			// é isso que estou tentando fazer
			//  **********************************
			int[] a = {1,2,3,4};
			st.setAlgumaCoisa(1,a);
			//  **********************************
			
			ResultSet rs = st.executeQuery();

3 Respostas

E

String qry = "select * " + "from " + " tabela, " + "where " + " coluna in (?)";

? tá certo que não tem nada a ver com a sua pergunta mas não precisa dele.

black_fire

:arrow: Achei um negócio na net, não sei se é o jeito certo, mas funcionou.... heheheh.....

Valeu galera. Mesmo assim, não achei que esse é o jeito certo, se alguém tiver alguma outra dica por ai.....
um abraço.... :wink:

Vejam que o ? está comentado, /* ? */, depois no setString, fecho o comentário dos dois lados e adiciono o in setString("*/(1,2,3)/*"). o que aconteceu, as aspas do setString ficam comentadas... na query vai ficar assim: in /*'*/ (1,2,3) /*'*/
String qry =
         "select * \n" +
         "from \n" +
         "  tabela \n" +
         "where \n" +
         "  coluna in /* ? */";
      
      try {
         Class.forName("org.postgresql.Driver");
         Connection conn = DriverManager.getConnection("jdbc:postgresql://192.107.14.144:5432/desenv?charSet=UTF-8","postgres","senha");
         PreparedStatement st = conn.prepareStatement(qry);


         //  **********************************
         // é isso que estou tentando fazer
         //  **********************************
         st.setString(1,"*/(1,2,3)/*");
         //  **********************************
         
         ResultSet rs = st.executeQuery();
Rafael_Steil

Ugh… :shock:

Faz muita falta tambem um setXxx que recebesse o nome do campo, ao inves do indice numerico dele… algo como

INSERT INTO table ( :nome, :idade )
...
p.setString("nome", "meuNome");
p.setInt("idade", 99);
...

Rafael

Criado 9 de março de 2004
Ultima resposta 9 de mar. de 2004
Respostas 3
Participantes 3