chaliezhou 2010-05-20 22:09
浏览 1222
已采纳

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条回答

  • 拽拽的初行者 2010-05-21 08:09
    关注

    [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]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?