Problemas com array de objetos [RESOLVIDO]

18 respostas
selem32

Bom Dia

Galera é o seguinte, estou fazendo uma pesquisa no banco de dados e pego o result set e monto um objeto e daí add esse objeto na minha array, formando assim uma array de objetos, mas daí quando vou percorrer a minha array para imprimir o conteudo dela só imprimi o ultimo item setado no objeto. Abaixo segue os dois métodos que estou usando, desde já agradeço!!

Esse é o método responsável por fazer a pesquisa no banco e retornar a minha array preenchida.

public static ArrayList pesqBoni() {
        ArrayList array = new ArrayList();
        Connection conn = null;
        try {
            conn = Conecta.conectaBD();
            PreparedStatement pstmt = conn.prepareStatement(
                    "SELECT bonificacao.codigo, bonificacao.statusBoni, pedido.codPed, fornecedor.nome, " +
                    "       cliente.nomeCliente,pedido.dataPed " +
                    "FROM bonificacao LEFT JOIN fornecedor ON (bonificacao.fkFornec = fornecedor.codigo)" +
                    "LEFT JOIN pedido ON (bonificacao.fkPed = pedido.codPed)" +
                    "LEFT JOIN cliente ON(pedido.fkCliente = cliente.codCliente)" +
                    "WHERE pedido.dataPed BETWEEN ? AND ?");
            pstmt.setString(1, GridBoni.getDataIni());
            pstmt.setString(2, GridBoni.getDataFim());
            ResultSet rs = pstmt.executeQuery();
            while(rs.next()) {
                 DBGrid grid = new DBGrid();
                 grid.setCodigo (rs.getInt("bonificacao.codigo"    ));
                 grid.setPedido (rs.getInt("pedido.codPed"         ));
                 grid.setStatus (rs.getInt("bonificacao.statusBoni"));
                 grid.setCliente(rs.getString("cliente.nomeCliente"));
                 grid.setFornec (rs.getString("fornecedor.nome"    ));
                 grid.setData   (rs.getString("pedido.dataPed"     ));
                 array.add(grid);
                 System.out.println("Codigo = " + grid.getCodigo()  + ", pedido = " + grid.getPedido() + ", status = " + grid.getStatus() +
               "Client = " + grid.getCliente() + ", fornec = " + grid.getFornec() + ", data = " + grid.getData());
             }
        } catch (SQLException ex) {
            Logger.getLogger(DBGrid.class.getName()).log(Level.SEVERE, null, ex);
        }
        return array;
    }

Método resposável por imprimir conteúdo da array

private void dataFiFocusLost(java.awt.event.FocusEvent evt) {                                 
      ArrayList array = new ArrayList();

        GridBoni.setDataIni(TelaRelat.trataData(dataIn.getText()));
        GridBoni.setDataFim(TelaRelat.trataData(dataFi.getText()));
        array = DBGrid.pesqBoni();
        Iterator iterator = array.iterator();
        while(iterator.hasNext()) {
            DBGrid grid = (DBGrid) iterator.next();
                 System.out.println("Codigo = " + grid.getCodigo()  + ", pedido = " + grid.getPedido() + ", status = " + grid.getStatus() +
               "Client = " + grid.getCliente() + ", fornec = " + grid.getFornec() + ", data = " + grid.getData());
   }
}

18 Respostas

abelgomes

cara, aparentemente ta tudo certo…tb ja tive esse problema…olhando meu codigo aqui…a deiferença é que eu instancio o objeto depois do add…

#
#              grid.setCodigo (rs.getInt("bonificacao.codigo"    ));  
#              grid.setPedido (rs.getInt("pedido.codPed"         ));  
#              grid.setStatus (rs.getInt("bonificacao.statusBoni"));  
#              grid.setCliente(rs.getString("cliente.nomeCliente"));  
#              grid.setFornec (rs.getString("fornecedor.nome"    ));  
#              grid.setData   (rs.getString("pedido.dataPed"     ));  
#              array.add(grid);  
 grid = new DBGrid();

tenta ai…

selem32

tentei cara e naum deu certo! mas valew!!

xandevieira

so por desencargo, tenta assim:

private void dataFiFocusLost(java.awt.event.FocusEvent evt) {                                 
     
        GridBoni.setDataIni(TelaRelat.trataData(dataIn.getText()));
        GridBoni.setDataFim(TelaRelat.trataData(dataFi.getText()));
       ArrayList array = DBGrid.pesqBoni();
for (Iterator iterator = array.iterator(); iterator.hasNext();) {
	         DBGrid grid = (DBGrid) iterator.next();
                 System.out.println("Codigo = " + grid.getCodigo()  + ", pedido = " + grid.getPedido() + ", status = " + grid.getStatus() +
               "Client = " + grid.getCliente() + ", fornec = " + grid.getFornec() + ", data = " + grid.getData());
   }
}
selem32
avsouza:
so por desencargo, tenta assim:
private void dataFiFocusLost(java.awt.event.FocusEvent evt) {                                 
     
        GridBoni.setDataIni(TelaRelat.trataData(dataIn.getText()));
        GridBoni.setDataFim(TelaRelat.trataData(dataFi.getText()));
       ArrayList array = DBGrid.pesqBoni();
for (Iterator iterator = array.iterator(); iterator.hasNext();) {
	         DBGrid grid = (DBGrid) iterator.next();
                 System.out.println("Codigo = " + grid.getCodigo()  + ", pedido = " + grid.getPedido() + ", status = " + grid.getStatus() +
               "Client = " + grid.getCliente() + ", fornec = " + grid.getFornec() + ", data = " + grid.getData());
   }
}

Obrigado cara mas tambem naum deu certo, ta do mesmo jeito!! valew

xandevieira

vc ja debugou para ver sua lista?

selem32

sim…

xandevieira

quando vc especiona os objetos da lista, eles estao corretos?

selem32

sim cara

xandevieira

em ambas as impressoes esta saindo somente oultimo item setado?
Se fizer a consulta direta no banco como fica?

selem32

avsouza:
em ambas as impressoes esta saindo somente oultimo item setado?
Se fizer a consulta direta no banco como fica?

na primeira impressão sai os valores corretos como pesquisado no banco!! na segunda impressão q sai apenas o ultimo.

M

Uma sugestão:
No código postado existem 2 “abre chaves” (um do método e um do “while”), e apenas um “fecha chaves” (aparentemente do método). Será que o problema é nas chaves do while? Verifique isso.

selem32

marcobiscaro2112:
Uma sugestão:
No código postado existem 2 “abre chaves” (um do método e um do “while”), e apenas um “fecha chaves” (aparentemente do método). Será que o problema é nas chaves do while? Verifique isso.

é q esqueci de copiar a outra chave cara!! mas ela existe sim, c ñ tivesse o código nem executaria!! mas valew pela ideia!!

xandevieira

q coisa heim?

talves se iterar o proprio metodo DBGrid.pesqBoni()
ou array.addAll(DBGrid.pesqBoni()) e depois iterar

ou coisa eu crio um List array = new ArrayList(); mas a principio do jeito q vc fez deveria funcionar.

selem32

avsouza:
q coisa heim?

talves se iterar o proprio metodo DBGrid.pesqBoni()
ou array.addAll(DBGrid.pesqBoni()) e depois iterar

ou coisa eu crio um List array = new ArrayList(); mas a principio do jeito q vc fez deveria funcionar.

Complicado né cara!! ja naum sei mais o q testar!! ja tentei com list e naum deu certo, tentei agora iterar o método com a array mas o resultado tambem foi o mesmo!!

M

Não sei como resolver seu problema, mas tenho algumas sugestões:

No seu array, só existem objetos do tipo DBGrid, certo?

Porque não usa a notação:

Array<DBGrid> array = new ArrayList<DBGrid>();

Isso deixa o código mais limpo e não tem necessidade do cast. Também pode usar o enhanced-for.

selem32

marcobiscaro2112:
Não sei como resolver seu problema, mas tenho algumas sugestões:

No seu array, só existem objetos do tipo DBGrid, certo?

Porque não usa a notação:

Array<DBGrid> array = new ArrayList<DBGrid>();

Isso deixa o código mais limpo e não tem necessidade do cast. Também pode usar o enhanced-for.

Blz! valew pela dica

abelgomes

o problema é que no POJO todos os atributos estao static, ele vai sempre ser unico…ou seja, o ultimo valor…tira o static que a parada vai fucionar…

selem32

realmente!! obrigado abel!! desculpa o erro!! obrigado pela ajuda mesmo cara!! fiko te devendo!! agradeço a galera tambem q tentou ajudar!!

Abraços a todos

Criado 22 de dezembro de 2008
Ultima resposta 22 de dez. de 2008
Respostas 18
Participantes 4