在对数据库进行查询时,返回ResultSet,利用其next()方法进行遍历时,将其数据取出放入Arraylist中时为嘛出现问题?
public ArrayList<Student> addList(ResultSet rs) { ArrayList<Student> list = new ArrayList<Student>();
try {
while (rs.next()) {
                                     this.setId(Integer.parseInt(rs.getString("id")));
this.setName(rs.getString("name"));
this.setSex(rs.getString("sex"));
this.setAge(Integer.parseInt(rs.getString("age")));
list.add(this); //Student s = new Student();
//s.setId(Integer.parseInt(rs.getString("id")));
//s.setName(rs.getString("name"));
//s.setSex(rs.getString("sex"));
//s.setAge(Integer.parseInt(rs.getString("age")));
//list.add(s);
}}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
就是其在输出时,仅仅有最后的一条记录,而如果在里面生成一个对象时就可以了,this不是指向当前对象嘛,每执行一次add再改数据也可以啊,请高手赐教谢啦!

解决方案 »

  1.   

    还是new一个对象再使用set方法吧,你这样每次使用this导致的结果就是无论数据库中有多少条记录,最终你的list中就只有1条记录。
      

  2.   


    对,this代表当前对象,你操作的是同一个对象。只能得到数据库中的最后一条记录。
    通常这么做。ArrayList<Student> list = new ArrayList<Student>();
    try {
    Student s =null;
    while (rs.next()) {s = new Student();
    s.setId(Integer.parseInt(rs.getString("id")));
    s.setName(rs.getString("name"));
    s.setSex(rs.getString("sex"));
    s.setAge(Integer.parseInt(rs.getString("age")));
    list.add(s);
    }
      

  3.   

    list size是结果集的条数取出对象属性值是最后一次插入的值应为你修改的是同一个对象的引用
      

  4.   

    如图,放入list中的对象,是你最后一次改变属性的对象.
    其实是同一对象,只是你把它的属性值改变而已,然后添加多次。
      

  5.   

    我恨2楼的,回答的这么完整list每次添加东西都要new一下,不然被覆盖
      

  6.   

    可是list的add方法是在对ResultSet的遍历时进行的啊,感觉应该是每遍历一次应该把当前的数据添加到list才对啊