Ajuda com select

seguinte tenho uma consulta por id_cliente, funciona tudo certo, quero fazer uma consulta com varios id do cliente tipo listar cliente com ID 1 2 3 4, tentei o seguinte sem exito

  public ResultSet CONSULTA_Cod_ARRAY(ArrayList cod){
          
           String sql = "SELECT * FROM Contato WHERE Código = ?";

            for (int i = 0; i < cod.size();i++ ) {
                if (cod.size() == i+1 ){
    sql = String.Concat(sql, " ", Convert.ToString(cod[i]));
                }else {
  sql = String.Concat(sql,  Convert.ToString(cod[i]),  " or Código= ");

                }

  try {
            PreparedStatement stmt = getConexao().prepareStatement(sql);
             stmt.setString(1, o que vai aqui para minha pesquiza ????);
            ResultSet rs = stmt.executeQuery();

            return (rs);

        } catch (SQLException sQLException) {
            System.out.println("Erro ao listar Cliente");
        }
               

return null;
        }

ai tenho a funcao que contem um arraylistc om os ID que eu quero listar alguem poderia me ajudar ???

Fábio, blz?

Cara, se entendi bem, vc está precisando da cláusula IN do SQL.

Algo como:

SELECT * FROM Contato WHERE Código IN (1,2,3) 

Teste algo assim e diz se era o seu caso.

Falew.

isso mesmo, so que o problema eu tenho uma jtable com varias linhas da pesquiza entendeu ai eu seleciono a linha cada linha selecionada eu guardo o codigo em um arraylist vou guardando…
EX seleciono a linha 20 30 45 e guardo os codigos dessas linhas e quero fazer o select apartir dos codigos dessas linhas somente

esse select SELECT * FROM Contato WHERE Código IN (1,2,3) se fosse sempre o COD 1,2,3 ta beleza mas nao sei qual é o codifo como que passo o array list para esse select ???

SELECT * FROM Contato WHERE Código IN (ARRAYLIST cod)

Então, eu precisei disso qdo ainda programava em C# e SqlServer.
Eu tinha q selecionar categorias de produto para impressão, ao invés de “de 1 a 10” eu poderia escolher
“1, 5, 8” por ex, mas n passava um objeto array propriamente dito, eu passava como uma string, q na
verdade era um array :D.
Eu tenho q dá uma reolhada, mas a solução é por aí.

meu exemplo acima é feito em C# e funciona beleza porque no C# tu passa o sqldireto so monta o sql e passa e deu aqui no java nao é so passar o sql tem que passar o parametro para a pesquiza ai que ta o porblema

try {
PreparedStatement stmt = getConexao().prepareStatement(sql);
stmt.setArray(1, AQUI TA O PORBLEMA);
ResultSet rs = stmt.executeQuery();

        return (rs);

    } catch (SQLException sQLException) {
        System.out.println("Erro ao listar Cliente");
    }

entendeu o que nao sei fazer ??? porque nao é um so e sim varios nao sei quantos depende de quantos estiver marcado

stmt.setArray(1, AQUI TA O PORBLEMA);

AQUI TÁ O PROBLEMA não poderia ser uma variável que vai recebendo valores de acordo o seu filtro?

voce diz passar o sql direto ??? como que ficaria o sql se eu quisesse fazer lista o cod 2 5 7 por exemplo

SELECT * FROM Contato WHERE codigo = 2 or codigo =5 or codigo = 7

o sql acho que seria isso isso eu fiz e agora passa la como esse sql ???

A lógica é mais ou menos essa:

SELECT * FROM Contato WHERE codigo in (cod)

Se sua variável “cod” armazenar “2,5,7”, o IN entederia.

OK exatamente isso que eu queria valeuu ai cara pela ajuda

que bucha nao deu pra afzer isso da erro

PreparedStatement stmt = getConexao().prepareStatement(sql);
stmt.setArray(1, cod);
ResultSet rs = stmt.executeQuery();

sorte q tem o netbeans fez pra min agora sim
stmt.setArray(1, (Array) cod);

Falew, se funcionar dá um OK, pra eu saber se pelo menos hj fiz uma contribuiçãozinha *r

Vou bolar um teste aqui

essa porra da tando erro no arraylist

 public ResultSet CONSULTA_Cod_ARRAY(ArrayList cod){
          cod.toArray();
           String sql = "SELECT * FROM Contato WHERE Código = ?";

            for (int i = 0; i < cod.size();i++ ) {
                if (cod.size() == i+1 ){
        sql = (sql + " " + Integer.toString(cod[i])AQUI ERRO);

                }else {
  sql = (sql + Integer.toString(cod[i])AQUI ERRO +  " or Código= ");

                }

                System.out.println(sql);
            }
           
     try {
            PreparedStatement stmt = getConexao().prepareStatement(sql);
             stmt.setArray(1, (Array) cod);
            ResultSet rs = stmt.executeQuery();

            return (rs);

        } catch (SQLException sQLException) {
            System.out.println("Erro ao listar Cliente");
        }
               

return null;
        }

o erro array required but java.util.arraylist found

Cara, fiz um teste, e funfou!

Vc cria uma variável do tipo String, vai concatenando os valores selecionados e pimba!

[code]

           String cods = "155, 158";

           Connection conn = Conexao.getConexao();
           Statement st = conn.createStatement();
           String comando = "SELECT * FROM CONTA WHERE conta_id IN (" + cods + ")";
           ResultSet rs = st.executeQuery(comando);
            while(rs.next()){
                System.out.println(rs.getString(1) + " " + rs.getString(2) + " " + String.valueOf(rs.getInt("versao")));
          
            }
            conn.close();
}[/code]

Tenta assim.

de fato

     private Cliente getSelecionadoCliente(){
    if(tabela.getSelectedRow() == -1) {
        JOptionPane.showMessageDialog(this, "Selecione uma linha da tabela.",
                "ERRO", JOptionPane.ERROR_MESSAGE);
        return null;
    }
    DefaultTableModel modelo = (DefaultTableModel) tabela.getModel();
    Integer id = Integer.parseInt(modelo.getValueAt(tabela.getSelectedRow(), 0).toString());
     System.out.println(id);
    
    ClienteDao cliente = new ClienteDao();

    return cliente.Consultar(id);
    
}  

ai meu codigo que pega o codigo de 1 linha selecionada, se eu selecionar mais de 1 linha ele tem que concatenar os codigos teria alguma ajuda ???

o ID pega o codigo quando clica na linha da tabela

codigos = concat(Integer.toString(id)); tentei assim mas nao é concat isso é no C#


private Cliente getSelecionadoCliente(){  
String cods=null;
if(tabela.getSelectedRow() == -1) {  
    JOptionPane.showMessageDialog(this, "Selecione uma linha da tabela.",  
            "ERRO", JOptionPane.ERROR_MESSAGE);  
    return null;  
}  
DefaultTableModel modelo = (DefaultTableModel) tabela.getModel();  
Integer id = Integer.parseInt(modelo.getValueAt(tabela.getSelectedRow(), 0).toString());  
System.out.println(id);  

cods = cods +  id.toString() + ", ")
  
ClienteDao cliente = new ClienteDao();  
  
return cliente.Consultar(cods)

Algo mais ou menos assim (isso é Swing né?), eu n sei o comportamente do click, mas se for
a cada clicada uma selecionada, ele pode ir acumulando numa variável, dpois vc retira algum
caracter que sobre, como a última vírgula por ex.

O caminho é esse, eu to aqui apanhando do Flex, breve precisarei de algo como isto.

c vc quer selecionar a linha da tabela clicando
poderia por 1 action listener pa receber o id e jogar numa variavel c for varios id joga os valores num array dpois para fazer a conssulta faz 1 loop
a cada ciclo do loop retira 1 valor do array e joga numa variavel

c falei bobagem mauls :lol: