/**
   * 根据type来返回Article,and 保存在list.
   */
 public List reType(int type){
 List artlist=new LinkedList();
 Article art=new Article();
 conn=DBConnection.getConnection();
 String sql="select * from ARTICLE where type=? order by writeDate desc";
 try {
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1, type);
rs=pstmt.executeQuery();
while(rs.next()){
art.setArticleId(rs.getInt("articleId"));
art.setTitle(rs.getString("title"));
art.setType(type);
art.setContent(rs.getString("content"));
art.setWriter(rs.getString("title"));
art.setWriteDate(rs.getString("writeDate"));
System.out.println(art.title);//这里可以输出5个不同的值。。
artlist.add(art);
}
 Iterator item=artlist.iterator();
    while(item.hasNext()){
     Article rrr=(Article)item.next();
     System.out.println(rrr.getTitle());//为什么这里输出的全部是相同的呢?
    }
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

 return artlist;//导致返回的List也是5个一样的值
 }
这么办呢??

解决方案 »

  1.   

     Article art=new Article();
    这个的实例化放到while里
      

  2.   

    一般循环的向LIST中填加对象的时候,都是在循环里面实例化对象的。如果属性多的话可以考虑用org.apache.commons.beanutils.PropertyUtils这个辅助类来组装对象。
      

  3.   

    Article art=new Article(); 放大while循环中
      

  4.   

    Article art=new Article(); 放大while循环中
      

  5.   

    Article art=new Article(); 放大while循环中
      

  6.   

    这样改: 把Article art=new Article();放到while
    while(rs.next()){
              Article art=new Article();
                art.setArticleId(rs.getInt("articleId"));
                art.setTitle(rs.getString("title"));
                art.setType(type);
                art.setContent(rs.getString("content"));
                art.setWriter(rs.getString("title"));
                art.setWriteDate(rs.getString("writeDate"));
                System.out.println(art.title);//这里可以输出5个不同的值。。
                artlist.add(art);
            }Article 它是bean对象,你从数据库里面拿出来的值布置一条吧。每次拿出来之后,
    都要set到Article对象里面去,如果不放到while里面去的话,那它拿出来的都是同一条数据,都是第一条。
    然后在放到artlist里面。
      

  7.   

    Article art=new Article(); 每次都要执行一次,我也犯过同样的错误。
      

  8.   

        Article art=new Article();    
        你的实体类,放在了循环的外面,你怎么赋值都是白费呀,兄弟! 分多可以直接送我一些,何必要用这样的方式呢!而且你发完帖子 自己就解决了!够厉害!
      

  9.   

    Article art=new Article(); 
    这个的实例化放到while里 
      

  10.   

    Article art=new Article();放到while里面就可以了~~~
      

  11.   

    Article art=new Article();这句放到while循环里
     
      

  12.   

    你的list始终是一个art,只能保存最后一次的赋值
      

  13.   


    public List reType(int type){
         List artlist=new LinkedList();
         Article art=new Article();    //去掉这句
         conn=DBConnection.getConnection();
         String sql="select * from ARTICLE where type=? order by writeDate desc";
         try {
            pstmt=conn.prepareStatement(sql);
            pstmt.setInt(1, type);
            rs=pstmt.executeQuery();
            while(rs.next()){
             Article art=new Article();  //加上这句
                art.setArticleId(rs.getInt("articleId"));
                art.setTitle(rs.getString("title"));
                art.setType(type);
                art.setContent(rs.getString("content"));
                art.setWriter(rs.getString("title"));
                art.setWriteDate(rs.getString("writeDate"));
                System.out.println(art.title);//这里可以输出5个不同的值。。
                artlist.add(art);
            }
             Iterator item=artlist.iterator();
                while(item.hasNext()){
                    Article rrr=(Article)item.next();
                    System.out.println(rrr.getTitle());//为什么这里输出的全部是相同的呢?
                }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
         return artlist;//导致返回的List也是5个一样的值
     }