【问题标题】:ArrayList iterates same dataArrayList 迭代相同的数据
【发布时间】:2014-01-13 23:50:30
【问题描述】:

我尝试在 MVC 模式中创建一个 Web 应用程序来显示来自 DB 的数据

JSP:

<c:forEach var="pro" items="${list}">
            <tr>
           <td><c:out value="${pro.reqno}"></c:out></td>
           <td><c:out value="${pro.leave_Type}"></c:out></td>
           <td><c:out value="${pro.no_of_days}"></c:out></td>
           <td><c:out value="${pro.status}"></c:out></td>
           <td><c:out value="${pro.balanceUnits}"></c:out></td>
           <td><c:out value="${pro.totalUnits}"></c:out></td>
            </tr>
    </c:forEach>

Servlet:

           ArrayList temp = summary.getSummary(objUsr);
           request.setAttribute("list", temp);
           RequestDispatcher rd = request.getRequestDispatcher("JSP/login-success.jsp");

DAO 类:

public ArrayList<LeaveSummary> getSummary(LeaveSummary objUsr) throws SQLException {
    PreparedStatement stmt = null;
    ArrayList<LeaveSummary> rowArray = new ArrayList<LeaveSummary>();
    ResultSet rs = null;
    try {
        LeaveSummary getValuesFromDb = new LeaveSummary();
        Connection con = ConnectionProvider.getCon();
        stmt = con.prepareStatement("SELECT * FROM create_request where username=?");
        stmt.setString(1, objUsr.getUser_name());
        rs = stmt.executeQuery();
        while (rs.next()) {
            getValuesFromDb.setReqno(rs.getInt(1));
            getValuesFromDb.setUser_name(rs.getString(2));
            getValuesFromDb.setNo_of_days(rs.getInt(4));
            getValuesFromDb.setLeave_Type(rs.getString(3));
            getValuesFromDb.setStatus(rs.getString(6));
            getValuesFromDb.setTotalUnits(rs.getInt(7));
            getValuesFromDb.setBalanceUnits(rs.getInt(8));
            rowArray.add(getValuesFromDb);
        }
    }
   catch(Exception e)
           {
       e.printStackTrace();
   }

数据库表:


1 san                  Casual                        1 sicks                pending                                                  10                                      9 
2 san                  Others                        2 Functional           pending                                                  10                                      8 

但它只打印第二行(即最近添加的行),我如何打印表格中的两行

【问题讨论】:

    标签: java oracle jsp arraylist jstl


    【解决方案1】:

    创建一个新实例

    LeaveSummary getValuesFromDb = new LeaveSummary(); 
    

    在你的 while 循环中。您不会为数据库中的每条记录创建一个新的 LeaveSummary 实例。因此,每次循环结果集时都会重写相同的对象。这就是列表中仅存在最后一条记录的原因。

    【讨论】:

    • 我需要对同一应用程序中的另一个场景进行说明。你能在聊天中继续这个吗
    • 你可以发起聊天吗,我是新手
    【解决方案2】:

    问题是您修改同一个对象并将其添加到列表中。在 while 循环中创建新对象。

      LeaveSummary getValuesFromDb = new LeaveSummary();
        Connection con = ConnectionProvider.getCon();
        stmt = con.prepareStatement("SELECT * FROM create_request where username=?");
        stmt.setString(1, objUsr.getUser_name());
        rs = stmt.executeQuery();
        while (rs.next()) {
            //Add this line   
            getValuesFromDb = new LeaveSummary();
            getValuesFromDb.setReqno(rs.getInt(1));
            getValuesFromDb.setUser_name(rs.getString(2));
            getValuesFromDb.setNo_of_days(rs.getInt(4));
            getValuesFromDb.setLeave_Type(rs.getString(3));
            getValuesFromDb.setStatus(rs.getString(6));
            getValuesFromDb.setTotalUnits(rs.getInt(7));
            getValuesFromDb.setBalanceUnits(rs.getInt(8));
            rowArray.add(getValuesFromDb);
        }
    

    【讨论】:

      【解决方案3】:

      试试这个代码

      LeaveSummary getValuesFromDb = new LeaveSummary();
          Connection con = ConnectionProvider.getCon();
          stmt = con.prepareStatement("SELECT * FROM create_request where username=?");
          stmt.setString(1, objUsr.getUser_name());
          rs = stmt.executeQuery();
          while (rs.next()) {
      
              getValuesFromDb = new LeaveSummary();
              getValuesFromDb.setReqno(rs.getInt(1));
              getValuesFromDb.setUser_name(rs.getString(2));
              getValuesFromDb.setNo_of_days(rs.getInt(4));
              getValuesFromDb.setLeave_Type(rs.getString(3));
              getValuesFromDb.setStatus(rs.getString(6));
              getValuesFromDb.setTotalUnits(rs.getInt(7));
              getValuesFromDb.setBalanceUnits(rs.getInt(8));
              rowArray.add(getValuesFromDb);
          }
      

      【讨论】:

        猜你喜欢
        • 2021-10-04
        • 1970-01-01
        • 2018-09-18
        • 2014-07-07
        • 2012-12-06
        • 1970-01-01
        • 2020-07-09
        • 2018-02-20
        相关资源
        最近更新 更多