JSPでJAVAを使用してDataTableのにSQLデータを追加

justarandom:

私のSQL Serverでは、私は、すべての条件フィルタリングと合計クエリ実行後、次の結果セットを持っています。

SQL結果

私は私のページで、次のように示すことがしたいと思います(下のスクリーンショット参照)。

![実績必要

私は私が私のDataTableに追加さという結果が得られた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() 私のDBにクエリを送信するためにJDBCに私のSQLクエリを送信するために使用されます。

下の写真は左側に日付があり、右側にデータがあり、コードの実行後に、私のDataTableで追加されたデータです。

データのセット

私は、いくつかの異なるコードを試してみました

<%
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でそれを見るかのようなデータを返します。

間違ったSQL

何を私が間違ってやったのとどのように私はそれが私の予想結果を得るために行う必要がありますか?(下のスクリーンショット)

期待される成果

あなたのすべての助けに感謝。

モフセンザマヌ:

あなたは、その鍵があると地図を使用することができdate、その値が再び地図です。インナー地図を使って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で使用するコードを変更することができます。

ここでは、画像の説明を入力します。

そのキーの自然順序が注文した地図を持っているために、TreeMap使用することができます。だから、日付順のデータを印刷するために、我々は含む新しいTreeMapを構築することができmapByDate、データを:

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

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=408356&siteId=1