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 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序