【问题标题】:list elements not accumulating properly列表元素没有正确累积
【发布时间】:2017-06-20 08:36:28
【问题描述】:

学年模型

 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;
    }
}

SchoolYearDaoImpl类方法

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;
    }

我通过调用存储过程getAllSchoolYearInfo() 获得的结果集显示了 yearFrom 列的 2 行。

但是,当我运行程序查看我的 GUI 上的内容时,我在 JComboBox 中获得了 2 个值,这似乎是第 2 行的值 2015

如您所见,我尝试获取列表的大小以查看存储了多少对象。所以我猜这可能是在这段代码中对象如何存储和累积到List&lt;SchoolYear&gt;的问题。

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());
                }
            }

或者问题出在我的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;
            }
        } );

有什么想法吗?

谢谢。

【问题讨论】:

标签: java swing jdbc resultset


【解决方案1】:

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

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

【讨论】:

  • 我的错。我应该花更多时间检查顺序。对不起这个问题。不过谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多