如何从JSP文件迭代ResultSet?

时间:2014-06-20 15:13:34

标签: java sql jsp servlets resultset

我在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

4 个答案:

答案 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;
}