Ajuda com ArrayList de um objeto

8 respostas
diogoprosoft

Galera estou com dificuldades de implementar meu codigo com o arrayList…

A situacao é a seguinte:

Criei um arrayList, fiz um while para pegar o resultset do banco, depois fiz um for para pegar o resultado do result e jogar no meu array para mostrar na tela, veja como esta o meu código

ResultSet rsEstado = estadoService.selectEstado(estadoVO);                        

        List listaEstados = new ArrayList(); 
              
        while(rsEstado.next()){ 
            
            estadoVO.setSgEstado(rsEstado.getString(3));
            
        }                
     
        for(int i = 0; i < listaEstados.toArray().length ; i++){         
                        
            listaEstados.add(estadoVO);
            request.setAttribute("listaEstados", listaEstados);    
        }

PORQUE NÃO ESTÁ FUNCIONANDO???

8 Respostas

leofernandesmo

Rapaz…vc está tentando percorrer um List vazio.

ResultSet rsEstado = estadoService.selectEstado(estadoVO);                          
      
            List listaEstados = new ArrayList();   //Aqui vc declara...
                    
            while(rsEstado.next()){   
                  
                estadoVO.setSgEstado(rsEstado.getString(3));  
                  
            }                  
          //Aqui vc ate então não atribuiu nem adicionou nenhum valor..
           for(int i = 0; i < listaEstados.toArray().length ; i++){           
                             
               listaEstados.add(estadoVO);  
               request.setAttribute("listaEstados", listaEstados);      
           }

Esse while não está fechando antes da hora não ??Ou pelo menos falta adicionar alguma coisa dentro ele.

diogoprosoft

Bom eu fiz um teste usando somente o while para me retornar a lista de estados
só que me retorna 27 linhas porém imprime 27 TO = tocantins

então pensei em usar o for para percorrer meu array mais não estou conseguindo

o que esta faltando?

onde posso setar os valores que vc falou?

wbdsjunior

diogoprosoft!

você criou apenas um objeto estadoVO, está mudando apenas o atributo SgEstado a acada passada pelo loop e adicionando o mesmo objeto varias vezes na lista…

crie um novo objeto a cada passada pelo while e adicione-o no ArrayList…

depois você pode percorrê-lo como quiser…

ViniGodoy

Faltou dar o comando para adicionar na sua lista!

List listaEstados = new ArrayList(); 
ResultSet rsEstado = estadoService.selectEstado(estadoVO);
              
while(rsEstado.next()){ 
    //É necessário criar VOs diferentes! 
    //Senão vc vai adicionar o mesmo várias vezes na lista
    estadoVO = new EstadoVO();
    estadoVO.setSgEstado(rsEstado.getString(3));
    listaEstados.add(estadoVO); //Precisa adicionar na lista!
}                
request.setAttribute("listaEstados", listaEstados);

Você está usando Java 4? No 5, ou superior, é melhor especificar o tipo do conteúdo da lista:

List&lt;EstadoVo&gt; listaEstados = new ArrayList&lt;EstadoVo&gt;(); 
ResultSet rsEstado = estadoService.selectEstado(estadoVO);
              
while(rsEstado.next()){ 
    //É necessário criar VOs diferentes! 
    //Senão vc vai adicionar o mesmo várias vezes na lista
    estadoVO = new EstadoVO();
    estadoVO.setSgEstado(rsEstado.getString(3));
    listaEstados.add(estadoVO); //Precisa adicionar na lista!
}                
request.setAttribute("listaEstados", listaEstados);
fantomas

Acho que estas alterações irão ajudar.

ResultSet rsEstado = estadoService.selectEstado(estadoVO);                        

	        //List listaEstados = new ArrayList();  
	        List<EstadoVO> listaEstados = new ArrayList<EstadoVO>(0); // <<<< Alterei aqui 
	              
	        while(rsEstado.next()){ 
	        	
	        	EstadoVO e = new EstadoVO(); // <<< Alterei aqui - Assumi que existe esse construtor nesta classe
	            
	            //estadoVO.setSgEstado(rsEstado.getString(3));
	        	e.setSgEstado(rsEstado.getString(3));  // <<<<< Alterei aqui
	        	
	        	listaEstados.add(e); // <<<< Alterei aqui
	            
	        }                
/*	     
	        for(int i = 0; i < listaEstados.toArray().length ; i++){
	                        
	            listaEstados.add(estadoVO);
	            request.setAttribute("listaEstados", listaEstados);    
	        }
*/	        
            request.setAttribute("listaEstados", listaEstados);  // Alterei aqui

Os ajustes foram anotados com o comentario "Aterei aqui"

[]'s

diogoprosoft

vini ja tinha feito o que vc disse o porem e que ele me imprime 27 TO = tocantins que a ultima sigla do estado

porque esta acontecendo isso?

meu codigo esta assim agora:

Estado estadoVO = new Estado();        
        EstadoService estadoService = new EstadoService(orafactory);
        
        ResultSet rsEstado = estadoService.selectEstado(estadoVO);                        

        List listaEstados = new ArrayList(); 
              
        while(rsEstado.next()){ 
            
            estadoVO.setSgEstado(rsEstado.getString(3));
            listaEstados.add(estadoVO);            
        }
        
        request.setAttribute("listaEstados", listaEstados);
paulorb.pacheco

Ae se é o que eu entendi é que vc esta modificando sempre o mesmo objeto.
Como nosso colega Vini disse acima.
Tenta assim:

while(rsEstado.next()){   
             estadoVO = new Estado(); //<----------------------
             estadoVO.setSgEstado(rsEstado.getString(3));  
             listaEstados.add(estadoVO);              
         }

flw

diogoprosoft

Blz, Funcionou…

o codigo ficou assim:

ResultSet rsEstado = estadoService.selectEstado(estadoVO);                        

        List<Estado> listaEstados = new ArrayList<Estado>(); 
              
        while(rsEstado.next()){ 
            
            Estado e = new Estado();
            
            e.setSgEstado(rsEstado.getString(3));
            
            listaEstados.add(e);            
        }
        
        request.setAttribute("listaEstados", listaEstados);

Valeu Galera!!! :smiley:

Criado 6 de agosto de 2008
Ultima resposta 6 de ago. de 2008
Respostas 8
Participantes 6