我在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
。
答案 0 :(得分:2)
JSP中有一个名为Results的类,可以完全满足您的需求。您可以从ResultSet构造它,您可以关闭ResultSet和连接,结果有一个Iterable行数组,这些行本身就是映射。
答案 1 :(得分:1)
在我们读取ResultSet之后,我们需要关闭数据库连接。因为您在JSP中读取ResultSet,所以只能在JSP中关闭连接。在我看来,这不是一个好习惯。
在servlet中查询数据库之后,请读取ResultSet,将结果存储在List中,然后关闭数据库连接。然后,在请求属性中将此List传递给JSP。您的JSP使用EL从请求属性中检索List。您可以使用JSTL迭代此List。
答案 2 :(得分:0)
您可以尝试使用专为访问JSP页面中的数据库而设计的SQL Tag Library。
我已经分享了Getting values from mysql database to show in JSP (JAVA)的方法以及可能对您有帮助的示例代码。
逻辑:只需从Servlet中的数据库中获取数据并填充POJO类中的数据,并将所有记录的最终列表设置为请求属性,最后将请求转发到JSP页面
答案 3 :(得分:0)
假设你有一个相当标准的ItemBean
(我把所有东西都变成了一个String,除了projectId)。然后,我可能会在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;
}