Select gravando em ArrayList

3 respostas
F
Olá pessoal como faço para utilizar um mesmo array em dois select, exemplo em um select eu vou preencher uma beans e uma das variaveis dessas beans ficara vazia, para que o proximo select possa alimentar essa variavel, so que nao estou conseguindo pegar o mesmo array que utilizei, o que posso fazer vou postar o código.
public ArrayList carregarInfo(String empresa,int cod_carregamento) {
        lista = new ArrayList();
        try {

            conex.conectar();
            Statement query = conex.conn.createStatement();
            ResultSet resultado = query.executeQuery("SELECT DISTINCT  a.cod_empresa,"
                    + "a.num_carregamento,a.num_pedido,e.nom_cliente,"
                    + "(trim(f.cod_uni_feder) ||'-'||trim(f.den_cidade)||'-'||trim(e.end_cliente))ender,e.den_bairro,e.cod_cliente,"
                    + "f.den_cidade "
                    + "FROM bc5_estrutura_vdp a , esp_montag_carreg b, item c , "
                    + "pedidos d , clientes e,cidades f "
                    + "WHERE a.cod_empresa='"+empresa+"' "
                    + "AND a.cod_empresa=b.cod_empresa "
                    + "AND a.cod_empresa = c.cod_empresa "
                    + "AND a.cod_empresa = d.cod_empresa "
                    + "AND a.cod_item_compon = c.cod_item "
                    + "AND c.ies_tip_item = 'F' "
                    + "AND a.num_carregamento = '"+cod_carregamento+"' "
                    + "AND a.num_carregamento = b.num_carregamento "
                    + "AND a.num_pedido = b.num_pedido "
                    + "AND a.num_pedido = d.num_pedido "
                    + "AND d.cod_cliente = e.cod_cliente "
                    + "AND e.cod_cidade = f.cod_cidade "
                    + "AND a.num_sequencia = b.num_sequencia "
                    + "ORDER BY e.cod_cliente,a.num_pedido;");
                    
            while (resultado.next()) {
                rot = new Rota();
                rot.setCod_empresa(resultado.getString(1));
                rot.setNum_carregamento(resultado.getInt(2));
                rot.setNum_pedido(resultado.getFloat(3));
                rot.setNom_cliente(resultado.getString(4));
                rot.setEndereco(resultado.getString(5));
                lista.add(rot);
            }
            conex.fechar_resultset(resultado);
            query.close();
            return lista;
        } catch(SQLException e) {
            System.out.println(e);
            return null;
        }
    }
Este é o primeiro select, que retorna em quase todas as variaveis da minha beans.
public ArrayList carregarPesoPedido(String empresa,int cod_carregamento) {
       //ArrayList lista1 = new ArrayList();
       //lista1 = lista;
        try {

            conex.conectar();
            Statement query = conex.conn.createStatement();
            ResultSet resultado = query.executeQuery("SELECT e2.num_pedido,f2.cod_cliente,"
                    + "trim(f2.nom_cliente)nom_cliente,CASE WHEN f2.end_cliente is NULL THEN ''"
                    + "WHEN f2.end_cliente IS NOT NULL THEN trim(f2.end_cliente) END end_cliente,"
                    + "CASE WHEN f2.den_bairro IS NULL THEN ''"
                    + "WHEN f2.den_bairro IS NOT NULL THEN trim(f2.den_bairro)"
                    + "END bairro,trim(h2.den_cidade)den_cidade,trim(h2.cod_uni_feder)cod_uni_feder,"
                    + "sum(e2.qtd_solicitada*(b2.pes_unit+round(1/c2.qtd_padr_embal,0)))peso "
                    + "FROM item b2 , item_embalagem c2,esp_montag_carreg d2 , "
                    + "bc5_estrutura_vdp e2 , clientes f2,pedidos g2,cidades h2 "
                    + "WHERE b2.cod_empresa='"+empresa+"' "
                    + "AND b2.cod_empresa=d2.cod_empresa "
                    + "AND b2.cod_empresa = e2.cod_empresa "
                    + "AND b2.cod_empresa = c2.cod_empresa "
                    + "AND b2.cod_empresa = g2.cod_empresa "
                    + "AND b2.cod_item = e2.cod_item_compon "
                    + "AND b2.cod_item = c2.cod_item "
                    + "AND d2.num_carregamento = '"+cod_carregamento+"' "
                    + "AND d2.num_carregamento = e2.num_carregamento "
                    + "AND d2.num_pedido = e2.num_pedido "
                    + "AND d2.num_pedido = g2.num_pedido "
                    + "AND f2.cod_cliente = g2.cod_cliente "
                    + "AND f2.cod_cidade = h2.cod_cidade "
                    + "AND d2.num_sequencia = e2.num_sequencia "
                    + "GROUP BY e2.num_pedido,f2.nom_cliente,f2.cod_cliente,f2.end_cliente,"
                    + "h2.den_cidade,f2.den_bairro,h2.cod_uni_feder "
                    + "ORDER BY f2.cod_cliente,e2.num_pedido;");
                    
            while (resultado.next()) {
                
               //Rota r = getRot();
                
  
                rot.setPeso(resultado.getFloat(8));
                lista.add(rot);
            }
            conex.fechar_resultset(resultado);
            query.close();
            return lista;
        } catch(SQLException e) {
            System.out.println(e);
            return null;
        }
     }

E esse e o meu segundo que não consigo utilizar o mesmo array, alguem pode me dar uma luz?

3 Respostas

Rodrigo_Sasaki

Sua dúvida não é relacionada a SQL nem nada do tipo, e sim a escopos de variável.

Se você tem uma variável com escopo local, ela só existirá dentro do método, a não ser que ela seja retornada ao final dele. Ex:
public void metodo(){
    String texto = "Minha variável local";
    // Essa variável  existirá dentro do método em que foi criada, ao terminar a execução do método, você não tem mais a referência dela
}
Agora se você retornar ela, você guarda a referência.
public void metodo(){
    String texto = retornarString();
}

public String retornarString(){
    String texto = "Minha variável local";
    return texto;
}
Portanto se você quer aproveitar uma variável em diversos métodos, você tem 2 opções nesse caso. Ou guarda a referência e envia como argumento para o próximo método:
public void metodo1(){
    String texto = retornarString();
    metodo2(texto); //Aqui eu passo a String que recebi para o próximo método
}

public void metodo2(String stringComoArgumento){
    System.out.println(stringComoArgumento)
}

public String retornarString(){
    String texto = "Minha variável local";
    return texto;
}
Ou defino a variável com um escopo maior. Escopo de classe, por exemplo.
public class MinhaClasse{

    private String minhaString;

    public void metodo1(){
        minhaString = "Minha String com escopo de classe";
        // Como a variável foi definida fora do método, o valor que for atribuído aqui permanecerá lá, 
        // e estará acessível para outros métodos da classe.
    }

    public void metodo2(){
        System.out.println(minhaString);
        // Aqui eu posso ler o valor que foi definido pelo metodo1
    }

}
Ficou mais claro?
douglaskd

eu acho estranho essa lógica de usar 2 selects para carregar a mesma lista, de uma estruturada melhor na sua regra de negócios.

agora com relação a usar a mesma lista, funciona mais ou menos assim:

public class SuaClasse{

private ArrayList<Rota> lista;

//setei como void
public void carregarInfo(String empresa,int cod_carregamento){

//sua implem
//lista.add......

}

//setei como void
public void carregarPesoPedido(String empresa,int cod_carregamento){

//sua implem
//lista.add......

}

public ArrayList<Rota> getListaRota(){

return lista;

}

}
F

E que tipo, os select que eu tenho que fazer são diferentes, um eu acho o pedido e outro o peso daquele pedido, eu nao estou conseguindo fazer o que relacionar , por exemplo o primeiro select me tras uma lista de 20 pedidos, que tera 20 pesos, dai quando eu faço o segundo select ele sobrepõe todas as outras informações na beans, em vez de ir direito exemplo pedido A peso A, ele nao faz isso que eu quero, ele deixa os outros campos tudo null, e o peso ele coloca certo, ai quando eu abro a minha tabela ela so tem os pesos sem as outras informações do primeiro select

Criado 26 de março de 2013
Ultima resposta 26 de mar. de 2013
Respostas 3
Participantes 3