gpt4 book ai didi

java - 在JSP中使用JAVA将SQL数据附加到数据表中

转载 作者:行者123 更新时间:2023-12-02 08:03:29 24 4
gpt4 key购买 nike

在我的 SQL Server 中,在执行所有条件过滤和求和查询后,我得到以下结果集。

SQL Results

我希望在我的页面中显示为这样(请参阅下面的屏幕截图)。

![Actual Results Needed

我尝试了下面的 JAVA 代码,这些代码给了我附加到数据表中的结果。

<%
ArrayList<String[]> rows = sqlq.querySQL();
String rowsetdate = new String();
String rowres1 = new String();
for(String[] rowset : rows) {
rowsetdate = rowset[0];
rowres1 = rowres1 + rowset[1]+ ",";
for(String rowres2 : rowset) {
rowres1 = rowres1 + rowres2 + ",";
}
rowres1 = rowres1.substring(0, rowres1.length()-1);
rowres1 = rowres1 + "|";
}
rowres1 = rowres1.substring(0, rowres1.length()-1);
%>

<tr>
<td><%if (rowres1 == null) out.print(""); else out.print(rowres1);%></td>
</tr>

sqlq.querySQL() 用于将我的 SQL 查询发送到 JDBC,以便我将查询发送到我的数据库。

下面的照片是代码执行后在我的数据表中附加的数据,左边是日期,右边是数据。

Sets of Data

我尝试了一些不同的代码,

<%
ArrayList<String[]> rows = sqlq.querySQL();
for(String[] rowset : rows) {
<tr>
<td><%if (rowset[0] == null) out.print(""); else out.print(rowset[0]);%></td>
<td><%if (rowset[1] == null) out.print(""); else out.print(rowset[1]);%></td>
</tr>
}
%>

它也没有达到我的预期结果,它返回的数据就像我在 SSMS 中看到的那样(检查下面的屏幕截图)

wrong sql

我做错了什么,我应该如何做才能达到预期的结果? (如下截图)

expected outcome

感谢大家的帮助。

最佳答案

您可以使用一个Map,它的键是date,它的值也是一个Map。内部映射使用 trans 作为键,使用 sumtot 作为值。

    Map<String, Map<String, String>> mapByDate = new HashMap<>();
TreeSet<String> allTrans = new TreeSet<>();

for (String[] row : rows) {
Map<String, String> mapByDateAndTrans = mapByDate.get(row[0]);
if (mapByDateAndTrans == null) {
mapByDateAndTrans = new HashMap<>();
}
mapByDateAndTrans.put(row[1], row[2]);
mapByDate.put(row[0], mapByDateAndTrans);
allTrans.add(row[1]);
}

下面是一个示例代码,用于按照您的预期打印数据:

    System.out.println("Date/Trans: " + allTrans);
for (Map.Entry<String, Map<String, String>> mapByDateEntry : mapByDate.entrySet()) {
System.out.print(mapByDateEntry.getKey() + ": ");
Map<String, String> mapByTrans = mapByDateEntry.getValue();
for (String trans : allTrans) {
String sumtot = mapByTrans.get(trans);
if (sumtot != null) {
System.out.print("[ " + sumtot + " ]");
} else {
System.out.print("[ ]");
}
}
System.out.println();
}

输出:

Date/Trans: [11200, 11201, 11202]
2019-07-02: [ 136 ][ 18 ][ 14 ]
2019-07-03: [ 164 ][ 10 ][ 8 ]

或者我们可以生成 HTML 表格内容:

    StringBuilder tableBuilder = new StringBuilder("<table border = 1>");
// table header
tableBuilder.append("<tr>");
tableBuilder.append("<th>date/trans</th>");
for (String trans : allTrans) {
tableBuilder.append("<th>").append(trans).append("</th>");
}
tableBuilder.append("</tr>");

// table rows
for (Map.Entry<String, Map<String, String>> mapByDateEntry : mapByDate.entrySet()) {
tableBuilder.append("<tr>");
tableBuilder.append("<td>").append(mapByDateEntry.getKey()).append("</td>");
Map<String, String> mapByTrans = mapByDateEntry.getValue();
for (String trans : allTrans) {
String sumtot = mapByTrans.get(trans);
if (sumtot != null) {
tableBuilder.append("<td>").append(sumtot).append("</td>");
} else {
tableBuilder.append("<td></td>");
}
}
tableBuilder.append("<tr>");
}
tableBuilder.append("</table>");

System.out.println(tableBuilder.toString());

输出:

<table border = 1><tr><th>date/trans</th><th>11200</th><th>11201</th><th>11202</th></tr><tr><td>2019-07-02</td><td>136</td><td>18</td><td>14</td><tr><tr><td>2019-07-03</td><td>164</td><td>10</td><td>8</td><tr></table>

如果我们将生成的输出保存为 HTML 文件,这可能是您想要的结果(下面的屏幕截图)。您还可以更改 JSP 中使用的代码:

enter image description here

要按键的自然顺序排列 Map,可以使用 TreeMap。因此,要打印按日期排序的数据,我们可以构造一个包含 mapByDate 数据的新 TreeMap:

    TreeMap<String, Map<String, String>> sortedMapByDate = new TreeMap<>(mapByDate);
// table rows
for (Map.Entry<String, Map<String, String>> mapByDateEntry : sortedMapByDate.entrySet()) {
tableBuilder.append("<tr>");
tableBuilder.append("<td>").append(mapByDateEntry.getKey()).append("</td>");
Map<String, String> mapByTrans = mapByDateEntry.getValue();
for (String trans : allTrans) {
String sumtot = mapByTrans.get(trans);
if (sumtot != null) {
tableBuilder.append("<td>").append(sumtot).append("</td>");
} else {
tableBuilder.append("<td></td>");
}
}
tableBuilder.append("<tr>");
}

关于java - 在JSP中使用JAVA将SQL数据附加到数据表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60947871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com