ArrayList的add总是添加相同的值

temp1898 发布于 2011/04/03 22:47
阅读 2K+
收藏 1

不好意思又要请大家帮忙,找了一下午也没找出毛病在哪儿……

这是实现类里的一个方法:

public ArrayList<Mywork> queryMywork(String user1){
  ArrayList<Mywork> mywork = new ArrayList<Mywork>(100) ;
  mywork.clear();
  if(user1==null||"".equals(user1.trim()))
  {
   return null;
  }
  String sql = "SELECT * FROM mywork WHERE user1=?" ;
  Mywork mk = new Mywork() ;
  PreparedStatement pstmt = null ;
  ResultSet rs=null;
  DBF dbf=new DBF();
  // 下面是针对数据库的具体操作
  try{
   // 连接数据库
   pstmt = dbf.getCon().prepareStatement(sql) ;   
   pstmt.setString(1, user1);
   rs = pstmt.executeQuery() ;
   while(rs.next())
   {
    // 查询出内容,之后将查询出的内容赋值给对象
    
    mk.setAdddate(rs.getString("adddate"));
    mk.setEnddate(rs.getString("enddate"));
    mk.setFile(rs.getString("file"));
    mk.setId(rs.getInt("id"));
    mk.setIsenddate(rs.getString("isenddate"));
    mk.setTitle(rs.getString("title"));
    mk.setTitle1(rs.getString("title1"));
    mk.setUser(rs.getString("user"));
    mk.setWorkmag(rs.getInt("workmag"));
    mk.setTit(rs.getString("tit"));
    mk.setFile1(rs.getString("file1"));
    mk.setUser1(rs.getString("user1"));
    mywork.add(mk);
   }
   rs.close() ;
   pstmt.close() ;
  }catch (Exception e){
   //throw new Exception("操作出现异常dbsy.jsbqaction.queryByID") ;
   System.out.print("查询错误work.mywork.myworkdaoimp.querymywork");
   e.printStackTrace();
   //return null;
  }
  finally{
   // 关闭数据库连接
   dbf.Close() ;
  }
  return mywork ;
  //return rs;
 }

下面是调用方法的jsp部分代码:

<body>
<%
Mywork mywork=new Mywork();
MyworkDAO mwkdao=MyworkDAOF.getMyworkDAOInstance();
ArrayList<Mywork> mkls=mwkdao.queryMywork((String)session.getAttribute("user"));
ArrayList<Mywork> mels=mwkdao.queryByUser((String)session.getAttribute("user"));
int i=0;

 %>

我未处理的工作:
<table width="800" border="1" bordercolor="#00FFFF">
  <tr>
    <td width="38"><div align="center">序号</div></td>
    <td width="445"><div align="center">标题</div></td>
    <td width="113"><div align="center">发起人</div></td>
    <td width="129"><div align="center">结束日期</div></td>
 <td width="41"><div align="center">操作</div></td>
  </tr>
  <%
  if(mkls==null){
  %>
  <tr>
    <td colspan="5"><div align="center" class="STYLE1">没有工作要处理</div></td>
  </tr>
  <%}else {
  while(i<mkls.size()&&i<5){
  %>
  <tr>
    <td><div align="center"><%=i+1 %></div></td>
    <td><div align="center"><%=mkls.get(i).getTitle1() %></div></td>
    <td><div align="center"><%=mkls.get(i).getUser() %></div></td>
    <td><div align="center"><%=mkls.get(i).getEnddate() %></div></td>
 <td><div align="center"><a href="<%=mkls.get(i).getId() %>">处理</a></div></td>
  </tr>
  <%
  ++i;}} %>
</table>

每次在jsp页面显示的5条信息都是数据库中最后一条记录的信息,搞不懂,今天是第一次用List接口,不知哪儿出了问题,请大家帮忙看一问题在哪儿,谢谢了……

加载中
0
卖豆浆不卖油条
卖豆浆不卖油条

应该是把 Mywork mk = new Mywork() ;放到while里面去

0
temp1898
temp1898

怎么看了都不理呀……

0
temp1898
temp1898

多谢多谢,我马上试一下……

0
temp1898
temp1898

非常感谢,可以了,但为什么要放到while里呢?

0
temp1898
temp1898

set方法不行?还没弄明白……

0
卖豆浆不卖油条
卖豆浆不卖油条

如果 Mywork mk = new Mywork() 放在while外面的话,mk还只存在一个对象,list.add()时只是把mk的引用传进去了。如果放在while里面的话,每循环一次,就会产生一个新的mk对象,add()传进去的,当然是指向不同的对象了

0
temp1898
temp1898

一语惊醒梦中人,对new终于有了新的认识,以前我都不用new(MyEclipse一大堆感叹号^_^),不好意思,才学的,好多基础知识都理解不彻底。真的谢谢了哈……

0
temp1898
temp1898

这样的话,可不可以这样理解,add是不是只是存储了地址指针,并没有存储实体对象……

0
卖豆浆不卖油条
卖豆浆不卖油条

正解,呵呵,谁说java没有指针啊哈!正确的解释为:对于基本数据类型(应该是那8种吧),java传的是值,非基本类型,传的是引用

0
temp1898
temp1898

嗯,明白了……有点像C里面指针那意思。

返回顶部
顶部