while(rs.next()){
              TmColor color=new TmColor();
              color.setColorCode(rs.getString("COLOR_CODE"));
              color.setColorName(rs.getString("COLOR_NAME"));
              color.setCreateBy(rs.getLong("UPDATE_BY"));
              color.setCreateDate(rs.getTimestamp("CREATE_DATE"));
              color.setEntityCode(rs.getString("ENTITY_CODE"));
              color.setOemTag(rs.getInt("OEM_TAG"));
              color.setUpdateBy(rs.getLong("UPDATE_BY"));
              color.setUpdateDate(rs.getTimestamp("UPDATE_DATE"));
              color.setVer(rs.getInt("VER"));
              colorList.add(color);       
}
为什么color对象只有在while里面创建,colorList才可以得到数据集的全部记录?
而在while外面的时候,colorList里面全都是重复的rs的最后一条记录?多谢

解决方案 »

  1.   

    当然的了,在while外面new,就创建一个实例,在见过循环的时候,每次循环都是后面的覆盖前面的,就这样之前覆盖下来就剩下最后一条记录了
    在在while里面new,每次都是一个新的实例不存在覆盖的情况,这样add到list都是不同的了
    在慢慢消化一下!!!
      

  2.   

    这里就是实例化的问题,实例化必须在while里面实例化,你只可以在外面声明对象!如果你在外面就实例化的话它就只可以ADD一个COLOR对象!因为地址都是一样的!
      

  3.   

    同一个对象,同一个引用,循环值更新,从始终唯一。。
    你可以把COLOR类声明放在外面,然后根据COLOR类循环创建COLOR对象,并加入List中
    TmColor color = null;
    while(rs.next()){
                  color=new TmColor();
                  color.setColorCode(rs.getString("COLOR_CODE"));
                  color.setColorName(rs.getString("COLOR_NAME"));
                  color.setCreateBy(rs.getLong("UPDATE_BY"));
                  color.setCreateDate(rs.getTimestamp("CREATE_DATE"));
                  color.setEntityCode(rs.getString("ENTITY_CODE"));
                  color.setOemTag(rs.getInt("OEM_TAG"));
                  color.setUpdateBy(rs.getLong("UPDATE_BY"));
                  color.setUpdateDate(rs.getTimestamp("UPDATE_DATE"));
                  color.setVer(rs.getInt("VER"));
                  colorList.add(color);       
    }
      

  4.   

    你对java的对象理解不透,while循环中,每次new一次产生一个对象,每次从数据库读取出来封装成一个对象color,然后将其放到list中,如果你把他放在while外边,那就相当于只new 了一次,每次都会覆盖上一次封装好的对象了。
      

  5.   

    使用new创建对象,会为对象分配一块内存区域,用来保存内存的信息;在给引用型变量赋值的时候相当于将这块内存的地址信息传递给了变量;修改对象相当于修改这块内存中的内容,而这块内存的地址是不变的。如果将new放在循环外面,就相当于分配了一块内存区域,然后给这块内存区域的地址起个名字叫color,每次循环,将内存区域的内容修改一下,然后把这块区域的地址放到colorList中。注意这个过程中,内存区域的地址没有变化,也就是说每次循环放入colorList的地址是相等的,当然修改对应内存区域,所有的指向这块内存的地址,所访问的内容都会被修改。所以你打印出来的内容是最后一次循环的改动的重复,相当于你把同一块内存区域中的内容输出了多遍。
      

  6.   

    在外面new新的对象,相当于从始至终就有一个color对象,而且每次都是把这个对象放入list,每次赋值都是改变的这个对象