Santhosh
Santhosh

Reputation: 8197

ArrayList iterates same data

I tried creating a web app in MVC pattern to display data from 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 class:

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();
   }

DB Table:


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

But it prints the second row alone (i.e) recently added row, How can i print both the rows from my table

Upvotes: 2

Views: 103

Answers (3)

user2910692
user2910692

Reputation:

Try this code

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);
    }

Upvotes: 1

The problem is u r modifying the same object and add it in the list. Create new object inside while loop.

  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);
    }

Upvotes: 2

Keerthivasan
Keerthivasan

Reputation: 12890

Create a new instance

LeaveSummary getValuesFromDb = new LeaveSummary(); 

in your while loop. You are not creating a new instance of LeaveSummary for every record in your database.so, the same object is rewritten everytime you loop your resultset. that's why that last record alone exists in the list.

Upvotes: 4

Related Questions