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

ale*_*dro 10 java jsp servlets jdbc

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

Bal*_*usC 35

您可以使用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);
}
Run Code Online (Sandbox Code Playgroud)

您可以在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>
Run Code Online (Sandbox Code Playgroud)