How to map a ResultSet with unknown amount of columns to a List and display it in a HTML table?

后端 未结 2 849
野的像风
野的像风 2020-12-01 10:12

I have created a Database Application using Netbeans, GlassFish and JavaDB. Now my controller Servlet code executes some dynamic SQL queries and get back a Result Set (or I

相关标签:
2条回答
  • 2020-12-01 10:34

    You can use Map<String, Object> to represent a "dynamic" row, which is iterable in <c:forEach>. You can use ResultSetMetaData to collect information about the columns such as the column count and the column labels.

    So, this mapping should do:

    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);
    }
    

    You can display it in JSP as follows:

    <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>
    
    0 讨论(0)
  • 2020-12-01 10:41

    Use the resultset metadata to know the number of columns returned by the query, the type of these columns, etc.

    See the javadoc, which also has an example.

    0 讨论(0)
提交回复
热议问题