Я создал приложение базы данных, используя Netbeans, GlassFish и JavaDB. Теперь мой контроллер Servlet code выполняет некоторые динамические SQL-запросы и возвращает набор результатов (или я могу изменить aString). Теперь, как я могу показать возвращенный набор результатов в табличном формате (я понятия не имею о структуре набора результатов). Может ли кто-нибудь помочь мне в этом?
Как сопоставить ResultSet с неизвестным количеством столбцов в списке и отобразить его в таблице HTML?
Ответ 1
Вы можете использовать Map<String, Object>
для представления динамической строки, которая iterable в <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>
Ответ 2
Используйте метаданные результатов, чтобы узнать количество столбцов, возвращаемых запросом, тип этих столбцов и т.д.
Смотрите javadoc, в котором также есть пример.