繁体   English   中英

为什么我的 ArrayList 的 object 在我添加对象后显示为空?

[英]Why is my ArrayList of object showing empty when i have added objects to it?

我正在开发一个使用 spring 的项目。 我有一项服务,它将 object 'Baby' 列表返回给 Model 属性。 由于某种原因,在遍历循环并将对象添加到列表后,我得到 list.IsEmpty() 为真。 我在这里做错了什么? 我的 CONTROLLER 代码:

  @GetMapping("/print")
              public String print(Model model) throws SQLException {
                  System.out.println(email);
                  ResultSet rs=DB.resultset(email);
                  model.addAttribute("items", DB.createList(rs));
                  return "contribution";
              }

我的数据库服务代码:

 public List<Baby> createList(ResultSet resultSet) throws SQLException {
    int count=0,i=0;
    ResultSet rs=resultSet;
    while(rs.next()){
        count++;
    }
    System.out.println(count);
    Baby baby[]=new Baby[count];
    List<Baby> list = new ArrayList<Baby>(count);
    while (resultSet.next()) {
        i=0;
        baby[i].setId(resultSet.getString("nameId"));
        baby[i].setName(resultSet.getString("name"));
        baby[i].setReligion(resultSet.getString("religion"));
        baby[i].setLocation(resultSet.getString("location"));
        list.add(baby[i]);
        i++;
        System.out.println(i);
        }
    System.out.println(list.isEmpty());
    return list;
}

婴儿 CLASS 代码:

package com.example.demo;
public class Baby {
private String id;
private String name;
private  String religion;
private String location;

public String getId() {
    return id;
}

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

public String getLocation() {
    return location;
}

public String getReligion() {
    return religion;
}

public void setLocation(String location) {
    this.location = location;
}

public void setReligion(String religion) {
    this.religion = religion;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}

您的问题是您尝试循环遍历 ResultSet 2 次:

 while(rs.next()) {
     count++;
 }

注意做ResultSet rs=resultSet; 不会创建 ResultSet 的副本。 相反,您现在只有 2 个变量指向同一个 ResultSet。

完成此循环后,您的 resultSet 将不再有元素,并且 next() 将返回 false。 所以你的第二个循环

while (resultSet.next()) {
    ....
}

根本不会输入您尝试添加到列表中的位置。

您必须将Baby实例创建为 object。 然后你必须把它放在数组中。数组有初始大小,但你必须从 class 添加实例,否则它没有引用。 实际上你不需要数组。 只需将Baby实例放入列表中即可。 在 DBSERVICE 中像这样更改您的 while 循环:

while (resultSet.next()) {
    Baby oneBaby = new Baby();
    oneBaby.setId(resultSet.getString("nameId"));
    oneBaby.setName(resultSet.getString("name"));
    oneBaby.setReligion(resultSet.getString("religion"));
    oneBaby.setLocation(resultSet.getString("location"));
    list.add(oneBaby);
    }
public List<Baby> createList(ResultSet resultSet) throws SQLException {

  List<Baby> list = new ArrayList<Baby>();

  while (resultSet.next()) {
    Baby baby= new Baby();
    baby.setId(resultSet.getString("nameId"));
    baby.setName(resultSet.getString("name"));
    baby.setReligion(resultSet.getString("religion"));
    baby.setLocation(resultSet.getString("location"));
    list.add(baby);
  }

  return list;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM