Reputation: 8197
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
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
Reputation: 590
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
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