gpt4 book ai didi

java - 列表元素未正确累积

转载 作者:行者123 更新时间:2023-11-29 04:35:01 26 4
gpt4 key购买 nike

学年模型

 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 行。

enter image description here

但是,当我运行程序查看我的 GUI 上有什么时,我在 JComboBox 中得到 2 个值这似乎是第 2 行的值 2015

enter image description here

如您所见,我试图获取列表的大小以查看存储了多少对象。所以我猜这可能是对象如何存储和累积到 List<SchoolYear> 的问题。在此代码块中。

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

有什么想法吗?

谢谢。

最佳答案

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

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

关于java - 列表元素未正确累积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42016349/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com