我在servlet文件中有一个简单的语句,它将遍历数据库并获得结果集
ResultSet AssignmentList = stmt.executeQuery("SELECT * FROM Assignments WHERE " + projectID + "= Pid;");
request.setAttribute("assignmentList", AssignmentList);
如您所见,我正在将ResultSet
发送到JSP文件。在这个JSP文件中,我尝试像这样遍历它。
<table class="CSSTableGenerator">
<thead>
<tr>
<th>Aid</th>
<th>Title</th>
<th>Task</th>
<th>ID of User Responsible</th>
</tr>
</thead>
<tbody>
<c:forEach items="${assignmentList}" var="item">
<tr>
<td>${item.Aid}</td>
<td>${item.Title}</td>
<td>${item.Task}</td>
<td> ${item.UserID}</td>
</tr>
</c:forEach>
</tbody>
</table>
但是当我这样做时,我得到一个错误。我是否应该以错误的方式迭代,或者不可能迭代ResultSet
。
JSP中有一个名为Results的类,它可以满足您的需求。您可以从ResultSet构造它,您可以关闭ResultSet和连接,并且Results有一个Iterable数组,其中的行本身就是映射。
读取ResultSet后,我们需要关闭数据库连接。因为在JSP中读取ResultSet,所以只能在JSP中关闭连接。在我看来,这不是一个好的做法。
在servlet中查询数据库后,读取ResultSet,将结果存储在List中,然后关闭数据库连接。然后,在请求属性中将这个List传递给JSP。JSP使用EL从请求属性中检索List。您可以使用JSTL来遍历这个List。
您可以尝试使用SQL标记库,它是为在JSP页面中访问数据库而设计的。
我已经分享了一种从mysql数据库获取值的方法,以便在JSP (JAVA)中显示)以及可能对您有所帮助的示例代码。
Logic:只需从Servlet中的数据库中获取数据,并将数据填充到POJO类中,并将所有记录的最终列表设置为请求属性,最后将请求转发到JSP页面。
假设您有一个相当标准的ItemBean
(我使一切字符串,除了投影)。然后,我可能会从DAO助手方法中的PreparedStatement
开始,如下所示
private static List<ItemBean> queryForItems(
Connection conn, int projectId) {
PreparedStatement ps = null;
ResultSet rs = null;
// The Query is using a bind parameter
final String ITEM_SQL = "SELECT * FROM Assignments WHERE Pid = ?";
// This is the Diamond Operator... if pre Java 7, use new ArrayList<ItemBean>();
List<ItemBean> al = new ArrayList<>();
try {
// Prepare the statement
ps = conn.prepareStatement(ITEM_SQL);
ps.setInt(1, projectId); // <-- bind the parameter
rs = ps.executeQuery();
while (rs.next()) { // <-- "Iterate" the ResultSet
ItemBean ib = new ItemBean();
ib.setPid(projectId);
ib.setAid(rs.getString("Aid"));
ib.setTitle(rs.getString("Title"));
ib.setTask(rs.getString("Task"));
ib.setUserId(rs.getString("UserID"));
}
} catch (SQLException se) {
System.err.println("Error with " + ITEM_SQL + " and projectId = " + projectId);
se.printStackTrace(System.err);
} finally {
// Clean up!
try {
rs.close();
} catch (SQLException ignored) {
}
try {
ps.close();
} catch (SQLException ignored) {
}
}
return al;
}