一尘不染

如何将具有未知列数的ResultSet映射到List并将其显示在HTML表中?

jsp

我已经使用Netbeans,GlassFish和JavaDB创建了一个数据库应用程序。现在,我的控制器Servlet代码执行一些动态SQL查询并返回结果集(或者我可以更改toString)。现在,如何以表格格式显示返回的结果集(我不知道结果集的结构)。有人可以帮我吗?


阅读 296

收藏
2020-06-08

共1个答案

一尘不染

您可以Map<String, Object>用来表示“动态”行,该行在中进行迭代<c:forEach>。您可以ResultSetMetaData用来收集有关列的信息,例如列数列标签

因此,此映射应执行以下操作:

List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();

while (resultSet.next()) {
    Map<String, Object> columns = new LinkedHashMap<String, Object>();

    for (int i = 1; i <= columnCount; i++) {
        columns.put(metaData.getColumnLabel(i), resultSet.getObject(i));
    }

    rows.add(columns);
}

您可以在JSP中将其显示如下:

<table>
  <thead>
    <tr>
      <c:forEach items="${rows[0]}" var="column">
        <td><c:out value="${column.key}" /></td>
      </c:forEach>
    </tr>
  </thead>
  <tbody>
    <c:forEach items="${rows}" var="columns">
      <tr>
        <c:forEach items="${columns}" var="column">
          <td><c:out value="${column.value}" /></td>
        </c:forEach>
      </tr>
    </c:forEach>
  </tbody>
</table>
2020-06-08