Почему мой ArrayList объекта отображается пустым, когда я добавил в него объекты? - PullRequest
0 голосов
/ 27 апреля 2020

Я работаю над проектом, в котором используется весна. у меня есть служба, которая возвращает список объекта «Baby» в атрибут модели. По какой-то причине после перебора l oop и добавления объектов в список я получаю list.IsEmpty (), который должен быть истинным. Что я здесь не так делаю? МОЙ КОД КОНТРОЛЛЕРА:

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

МОЙ КОД DBSERVICE:

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

КОД КЛАССА ДЕТЕЙ:

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

}

Ответы [ 3 ]

4 голосов
/ 27 апреля 2020

Ваша проблема в том, что вы пытаетесь l oop над своим ResultSet 2 раза:

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

Обратите внимание, что выполнение ResultSet rs=resultSet; не создаст копию вашего ResultSet. Вместо этого теперь у вас есть только две переменные, указывающие на один и тот же ResultSet.

Как только этот l oop будет выполнен, у вашего resultSet больше не будет элементов, и next () вернет false. Так что ваш второй l oop

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

, где вы пытаетесь добавить его в свой список, никогда не вводится вообще.

1 голос
/ 27 апреля 2020
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;
}
1 голос
/ 27 апреля 2020

Вы должны создать Baby экземпляр как объект. Затем вы должны поместить его в массив. Массив имеет начальный размер, но вы должны добавить экземпляр из класса, потому что в противном случае он не имеет ссылок. На самом деле вам не нужен массив. Просто поместите экземпляр Baby в список. Измените свое время l oop, как это внутри DBSERVICE:

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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...