Añadir datos SQL en tablas de datos utilizando Java en JSP

justarandom:

En mi SQL Server tengo los siguientes conjuntos de resultados después de toda la ejecución de la consulta de filtrado de estado y suma.

resultados SQL

Me gustaría ser mostrado como este en mi página (refiérase a la pantalla de abajo).

! [Resultados real que se necesita

He probado el siguiente código java que me dio los resultados que adjuntas en mis tablas de datos.

<%
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() se utiliza para enviar mi consulta SQL para JDBC con el fin de que envíe a mi consulta DB.

Foto de abajo son los datos adjuntos en mis tablas de datos después de la ejecución de código, a la izquierda es la fecha y la de la derecha es el de datos.

Conjuntos de datos

Probé un código diferente,

<%
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>
}
%>

que no lograr mis resultados esperados también, devuelve los datos como la forma en que lo veo en mis SSMS (cheque siguiente captura de pantalla)

sql mal

¿Qué he hecho mal y cómo debería hacerlo para conseguir mi resultado esperado? (Captura de pantalla a continuación)

gastos esperados

Apreciar la ayuda de todos ustedes.

Mohsen Zamani:

Puede utilizar un mapa que su clave es datey su valor es un nuevo mapa. Mapa interno utiliza transcomo clave y sumtotcomo valor.

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

Aquí es un código de ejemplo para imprimir datos como era de esperar:

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

La salida:

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

O podemos generar un contenido de tabla 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());

La salida:

<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>

Si salvamos salida generada como un archivo HTML, quizás sea el resultado deseado (figura de abajo). También puede cambiar el código para ser utilizado en JSP:

introducir descripción de la imagen aquí

Para tener un mapa ordenado por orden natural de sus llaves, una TreeMapse puede utilizar. Así que para imprimir los datos ordenados por fecha, podemos construir una nueva TreeMap que contiene los mapByDatedatos:

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

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=408364&siteId=1
Recomendado
Clasificación