ArrayList

3 respostas
potter
package com.Colegio.Delegate;

import java.io.PrintWriter;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.Colegio.Model.Serie;
import java.util.ArrayList;

public class SerieDao extends Dao
{
	 public Serie consultarSerie (PrintWriter out,int cod)
	    {   

		 ArrayList al=new ArrayList(); 
		 Serie s = new Serie();
	        try
	        {              
	            PreparedStatement stmt=con.prepareStatement("select * from serie");      
	            ResultSet rs = stmt.executeQuery();             
	            while(rs.next())
	            {                
	            	s.setId(rs.getInt("id"));    
	                s.setNome(rs.getString("nome"));
	                s.setValor(rs.getDouble("valor"));
	                s.setTurno(rs.getString("Turno"));
	                s.setAno(rs.getInt("Ano")); 
	                al.add("Serie");

	             }            
	            stmt.close();
	            rs.close();            
	        }catch(Exception  e)
	        {            
	           out.print(e.getMessage());
	        }
	        return s;
	    }
}

Oq Ta Faltando ?
e como faço para passar para o flex para amostrar todas as series num ComboBox ?

3 Respostas

Andre_Brito

Primeiro, coloque o seu código entre as tags code.
Segundo, quando for criar um tópico sobre Flex, JavaFX, Silverlight, ZK e outros, coloca na parte de RIA do forum.
Terceiro, pra passar pro Flex, você tem alguma noção de como faz? O Flex é quem pede isso. Daí você coloca isso na propriedade dataProvieder do ComboBox.

ViniGodoy

Feita a correção da tag e movido para o fórum certo. potter, na próxima siga as dicas do André Brito.

ViniGodoy

De cara dá para ver alguns problemas:

1. Você não está criando a série dentro do while;
2. Você está colocando no seu List a String "série" ao invés da série carregada do banco;
3. Você não está retornando o List;
4. Você não está tipando seu List (se tivesse tipado, ele não deixaria vc cometer o erro #2);
5. Você não está fechando a conexão, o resultset e o statement num finally;
6. Você só imprime a mensagem da exception. O ideal é imprimir o StackTrace inteiro, já que isso facilita MUITO a detecção de erros (ele põe, por exemplo, a linha onde o erro ocorreu). Jamais reduza a quantidade de informações que o Java fornece para você;
7. Se você vai retornar um List com todas as séries do banco, você não precisa passar o código da série como parâmetro;
8. Sempre retorne listas através da interface List, nunca os tipos ArrayList ou LinkedList. O mesmo vale para a interface Map e as classes HashMap, LinkedHashMap e TreeMap.

O código corrigido fica:

package com.Colegio.Delegate;

import java.io.PrintWriter;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.Colegio.Model.Serie;
import java.util.ArrayList;
   
public class SerieDao extends Dao {
   public List<Serie> consultarSeries(PrintWriter out) {   
      List<Serie> series = new ArrayList<Serie>(); 
      try {              
         PreparedStatement stmt = null;
         ResultSet rs = null;

         try {
            stmt=con.prepareStatement("SELECT * FROM serie");      
            rs = stmt.executeQuery();             
            while(rs.next()) {                
               Serie s = new Serie();
               s.setId(rs.getInt("id"));    
               s.setNome(rs.getString("nome"));
               s.setValor(rs.getDouble("valor"));
               s.setTurno(rs.getString("Turno"));
               s.setAno(rs.getInt("Ano")); 
               series.add(s);
            }         
         } finally {
            if (rs != null) rs.close();
            if (stmt != null) stmt.close();
         }            
      } catch(Exception  e) {            
         e.printStackTrace(out);
      }
       return series;
   }
}

Se seu método deveria retornar uma única série (como a assinatura dá a entender), então não há necessidade nem de se criar um ArrayList, de te ter um while. Nesse caso, realmente, crie uma única série e teste se o next retorna true num if. Você também teria que usar a clausula WHERE no seu sql, como no código abaixo:

package com.Colegio.Delegate;

import java.io.PrintWriter;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.Colegio.Model.Serie;
import java.util.ArrayList;
   
public class SerieDao extends Dao {
   public Serie consultarSeries(PrintWriter out, int cod) {   

      try {              
         PreparedStatement stmt = null;
         ResultSet rs = null;

         try {
            stmt=con.prepareStatement("SELECT * FROM serie WHERE id=?");      
            stmt.setInt(1, cod);

            rs = stmt.executeQuery();             
            if (!rs.next()) {
               return null //Série não encontrada
            }
            
            Serie s = new Serie();
            s.setId(rs.getInt("id"));    
            s.setNome(rs.getString("nome"));
            s.setValor(rs.getDouble("valor"));
            s.setTurno(rs.getString("Turno"));
            s.setAno(rs.getInt("Ano")); 
            return s;               
         } finally {
            if (rs != null) rs.close();
            if (stmt != null) stmt.close();
         }            
      } catch(Exception  e) {            
         e.printStackTrace(out);
      }
      return null;
   }
}
Criado 16 de junho de 2010
Ultima resposta 17 de jun. de 2010
Respostas 3
Participantes 3