Java 列出未正确累积的元素

Java 列出未正确累积的元素,java,swing,jdbc,resultset,Java,Swing,Jdbc,Resultset,学年模型 public class SchoolYear { int id; int start; int end; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getStart() { return start; } publ

学年模型

 public class SchoolYear {
    int id;
    int start;
    int end;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getStart() {
        return start;
    }

    public void setStart(int start) {
        this.start = start;
    }

    public int getEnd() {
        return end;
    }

    public void setEnd(int end) {
        this.end = end;
    }
}
学年DAOMPLL课堂教学法

public List<SchoolYear> getAllSchoolYearStart() {
        String SQL = "{CALL getAllSchoolYearInfo()}";
        SchoolYear schoolyear = new SchoolYear();
        List<SchoolYear> list = new ArrayList<>();
        try(Connection con = DBUtil.getConnection(DBType.MYSQL);
                CallableStatement cs = con.prepareCall(SQL);){
            try(ResultSet rs = cs.executeQuery();){
                while(rs.next()){
                    schoolyear.setStart(rs.getInt("yearFrom"));
                    list.add(schoolyear);
                }

                JOptionPane.showMessageDialog(null,list.size());
                for(int x=0; x<list.size(); x++){
                    JOptionPane.showMessageDialog(null,((SchoolYear)list.get(x)).getStart());
                }
            }
        }catch(SQLException e){
            JOptionPane.showMessageDialog(null,e.getMessage());
        }
        return list;
    }
或者问题可能出在我的
ListCellRenderer
上?我想不是

jcmbSchoolYearStart.setRenderer(new DefaultListCellRenderer() {
            @Override
            public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                if(value instanceof SchoolYear){
                    SchoolYear schoolyear = (SchoolYear) value;
                    setText(""+schoolyear.getStart());
                }
                return this;
            }
        } );
有什么想法吗


谢谢。

您只创建了一个
学年
实例。因为这样做,所以在
列表中只有一个引用。您可以注释掉当前的
学年
,并将其移动到循环中(并在使用它的任何地方进行修复),或者像这样在循环中声明一个新的局部变量

while(rs.next()){
    SchoolYear sy = new SchoolYear();
    sy.setStart(rs.getInt("yearFrom"));
    list.add(sy);
}

您在
getAllSchoolYearStart
方法中使用了
SchoolYear
的单个实例,该实例由数据库中的每个结果更新,然后重复添加到
列表中,但仍然是同一个实例。相反,请在
while(rs.next()){
循环中创建一个新的
学年
实例,该实例可能与我的bad重复。我应该花更多时间检查序列。对于这个问题,我感到抱歉。但谢谢。
while(rs.next()){
    SchoolYear sy = new SchoolYear();
    sy.setStart(rs.getInt("yearFrom"));
    list.add(sy);
}