ResultSet为什么只能返回一条数据?

我想创建一个方法,使用ResultSet从数据库中返回结果集并封装到List中,然后将List传递到Servlet中,再使用JSTL显示到前台页面。但是不知为什么ResultSet只能得到数据库中的第一行数据,如何才能返回数据库中的全部结果呢?

从数据库中返回结果集的代码如下:

[code="java"]

// 抽象出从数据库查询所有数据的方法
public static List getOracleFindAll() throws Exception {

    Connection conn = JDBC_Connection.getOracleConnection();

    String sql = "SELECT * FROM T_CHALIEZHOU_REGISTER";
    Statement stmt = conn.createStatement();
    // 返回结果集
    ResultSet rs = stmt.executeQuery(sql);

    //建立两个泛型容器
    List<User> lstuser = new ArrayList<User>();
    User user = new User();

    if(rs != null){

        while (rs.next()) {

            user.setUsername(rs.getString("t_username"));
            user.setUseridtype(rs.getString("T_USERIDTYPE"));
            user.setUserid(rs.getString("T_USERID"));
            user.setSex(rs.getString("T_SEX"));
            user.setDate(rs.getString("T_BIRTHDAY"));
            user.setIdencode(rs.getString("T_IDENCODE"));

            lstuser.add(user);          
        }
    }

    return lstuser;
}

[/code]

Servlet代码如下:

[code="java"]
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

    try {


        List<User> lst2 = DB_Operation.getOracleFindAll();

        request.setAttribute("lst2", lst2);

    } catch (Exception e) {

        e.printStackTrace();
    }
      // 重定向页面
     //String path = request.getContextPath();
    this.getServletContext().getRequestDispatcher("/registerlist.jsp")
            .forward(request, response);
}

[/code]

表现层JSTL代码如下:
[code="java"]











                                <c:forEach items="${ lst2 }" var="user">
                                    <tr align="center">

                                        <td align="center">${ user.username }</td>
                                        <td align="center">${ user.useridtype }</td>
                                        <td align="center">${ user.userid }</td>
                                        <td align="center">${ user.sex }</td>
                                        <td align="center">${ user.date }</td>
                                        <td align="center">${ user.idencode }</td>

                                    </tr>                                       
                                </c:forEach>

                        </table>
                    </c:if>
                </td>

[/code]

真实姓名 证件类型 证件号码 性别 出生日期 验证码

6个回答

[color=blue]
[b]
你的输出应该是,条数正确,但是内容都是同一条。

错误在于你的while循环体中,至始至终使用都是同一个User对象。所以导致list中所有的记录的内容相同。

改为如下形式:[/b][/color]

[code="java"] List lstuser = new ArrayList();

User user = null;

      if(rs != null){  

          while (rs.next()) {  
               user = new User();
              user.setUsername(rs.getString("t_username"));  
              user.setUseridtype(rs.getString("T_USERIDTYPE"));  
              user.setUserid(rs.getString("T_USERID"));  
              user.setSex(rs.getString("T_SEX"));  
              user.setDate(rs.getString("T_BIRTHDAY"));  
              user.setIdencode(rs.getString("T_IDENCODE"));  

              lstuser.add(user);            
          } [/code]

创建User写在循环里面:
[code="java"]
while (rs.next()) {
User user = new User();
...
lstuser.add(user);

}

[/code]

只有一个user实例,可不就一个呢:)

User user = new User(); 应该放在循环体里面..

不过如果不放里面的话, 也应该是[b]多条重复[/b]的记录呀..
是不是数据库里就是一条数据?

在循环体内打印测试一下

    //建立两个泛型容器   
    List<User> lstuser = new ArrayList<User>();   


    if(rs != null){   

        while (rs.next()) {   
            User user = new User();   
            user.setUsername(rs.getString("t_username"));   
            user.setUseridtype(rs.getString("T_USERIDTYPE"));   
            user.setUserid(rs.getString("T_USERID"));   
            user.setSex(rs.getString("T_SEX"));   
            user.setDate(rs.getString("T_BIRTHDAY"));   
            user.setIdencode(rs.getString("T_IDENCODE"));   

            lstuser.add(user);             
        }   
    }   

    return lstuser;   
}  

你的循环没处理好撒,楼上的都说到点子上了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐