[Resolvido] Lista retornando mesmo valores

1 resposta
michetti

Então galera eu criei uma list com banco de dados, porém na hora de retornar ela, mostra o ultimo cadastro 3 vezes ( no bd tem 3 horarios cadastrados)

public static void preenchendoCB(){
        jCBHorario.removeAllItems();
        Controlador c = new Controlador();
        List<Horario> lista = c.listarHorarios(); 
        DefaultComboBoxModel defaultComboBox = new DefaultComboBoxModel();      
        for ( Horario h : lista ) {  
            defaultComboBox.addElement( h.getHorario());  
}  
        jCBHorario.setModel(defaultComboBox); 
}

Controller

public List<Horario> listarHorarios(){
        List<Horario> horarios = dao.listarHorarios();
        return horarios;
        
    }

DAO

public List<Horario> listarHorarios(){
        ResultSet RS;
        Horario h = new Horario();
        String select="select * from horario";
        List<Horario> horarios = new ArrayList<>();
        try {
            RS = inserir.Consulta(select);
            while(RS.next()){
                h.setHorario(RS.getString("horario"));
                horarios.add(h);                
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        try {
            inserir.Exit();
        } catch (SQLException ex) {
            Logger.getLogger(NovoAgendamento.class.getName()).log(Level.SEVERE, null, ex);
        }
        JOptionPane.showMessageDialog(null, horarios);
        return horarios;
           
       }

Coloquei um JOptionPane.showMessageDialog dentro do whilhe(RS.Next()) e mostrou todos os 3 cadastrados..
Porem na parte do view(1 codigo que postei) o comboBox fica preenchido somento com o ultimo horario buscado

Alguem pode me ajudar?

1 Resposta

michetti

Para quem está com mesmo problema.. segue a solução

Como eu tenho que criar uma lista e passar todos os itens para ele, tenho que instanciar o objeto todas as vezes que passar no while(RS.next()) ou seja:

public List<Horario> listarHorarios(){
        ResultSet RS;
        String select="select * from horario";
        List<Horario> horarios = new ArrayList<>();
        try {
            RS = inserir.Consulta(select);
            while(RS.next()){
                Horario h = new Horario();//INSTANCIAR AQUI
                h.setHorario(RS.getString("horario"));
                horarios.add(h);                
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        try {
            inserir.Exit();
        } catch (SQLException ex) {
            Logger.getLogger(NovoAgendamento.class.getName()).log(Level.SEVERE, null, ex);
        }
        JOptionPane.showMessageDialog(null, horarios);
        return horarios;
           
       }
Criado 1 de novembro de 2013
Ultima resposta 1 de nov. de 2013
Respostas 1
Participantes 1