我将使用表中配置的值创建动态html表。我正在使用JSP和MVC架构。
我在表格中有行号,列号和值字段。如果值相应地为1.5和HELLO,那么我将在第1行和第5列中显示此HELLO。
表结构如下所示。
row column value
1 5 value1
2 8 value2
有什么想法吗?
答案 0 :(得分:5)
您需要先在String[][]
收集数据:
int rows = getMaxRowNumberFromDB();
int cols = getMaxColNumberFromDB();
String[][] values = new String[rows][cols];
// ...
while (resultSet.next()) {
int row = resultSet.getInt("row");
int col = resultSet.getInt("col");
String value = resultSet.getString("value");
values[row][col] = value;
}
(请注意,数组索引基于零,您可能希望先从row
和col
减去1)
然后在JSP中使用JSTL c:forEach
(或“MVC架构”正在使用的任何数据迭代标记)显示它:
<table>
<c:forEach items="${values}" var="row">
<tr>
<c:forEach items="${row}" var="value">
<td>${value}</td>
</c:forEach>
</tr>
</c:forEach>
</table>
答案 1 :(得分:1)
获取最大列数:
SELECT MAX(column) AS max_column
FROM xxx
然后按行/列顺序获取数据:
SELECT *
FROM xxx
ORDER BY row, column
然后编写一个无限循环的外循环,生成行,以及一个迭代列号的内循环。对于每个单元格,检查当前结果记录是否与坐标匹配。如果是,输出并获取下一条记录。
这是一些伪代码:
max_column = SELECT MAX(column) ...
data = SELECT * ...
if data.eof(): exit
output "<table>"
for row = 1..∞:
output "<tr>"
for col = 1..max_column:
output "<td>"
if data["row"] = row and data["column"] = col:
output data["value"]
data.next()
if data.eof(): exit
output "</td>"
output "</tr>"
output "</table>"
答案 2 :(得分:1)
继续您的有限信息(一旦您提供更多详细信息,我将对此进行编辑):
使用占位符:
每个单元格插入'{rol,col}'
使用sql返回:
id = {rolw,col}
value = value
伪sql:
select '{'+str(row)+','+str(col)+'}' as [id]
,value
from table
然后简单地遍历每条记录,并替换占位符。
<强> EG 强>