Как сопоставить ResultSet с неизвестным количеством столбцов в List и отобразить его в таблице HTML? - PullRequest
10 голосов
/ 09 февраля 2012

Я создал приложение базы данных, используя Netbeans, GlassFish и JavaDB.Теперь мой код сервлета контроллера выполняет некоторые динамические запросы SQL и возвращает набор результатов (или я могу изменить toString).Теперь, как я могу показать возвращенный набор результатов в табличном формате (я понятия не имею о структуре набора результатов).Кто-нибудь может мне помочь с этим?

Ответы [ 2 ]

35 голосов
/ 09 февраля 2012

Вы можете использовать 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>
3 голосов
/ 09 февраля 2012

Используйте метаданные набора результатов, чтобы узнать количество столбцов, возвращаемых запросом, тип этих столбцов и т. Д.

См. javadoc , в котором также есть пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...