Ich möchte einen Bericht erstellen, den Sie für Produkt und Geschäftsname auswählen, und gibt alle Umsätze pro Datum (innerhalb eines Bereichs) zurück.Java Map <String, Map <String, Integer> zum Füllen von Ergebnissen verwenden
Die db Ansicht, die mich mit anderen Berichten geholfen sieht wie folgt aus: Produkt - store_name - Datum
Bisher mein Ansatz ist es, alle Datensätze aus der db in einer Liste zurückzukehren und dann die folgende ich:
public void salesReport(String product, String store, String date){
List<RecordSalesInfo> salesResults = salesDao.getSales();
Map<String, Integer> mapper = new HashMap();
//calculation
for (RecordSalesInfo record : salesResults) {
StringBuilder key = new StringBuilder();
key.append(record.getProduct()).append(":")
.append(record.getStoreName()).append(":")
.append(record.getWageredDate()).append(":");
if (mapper.containsKey(key.toString())) {
Integer get = mapper.get(key.toString());
get++;
mapper.put(key.toString(), get);
} else {
mapper.put(key.toString(), 1);
}
}
for (String key : mapper.keySet()) {
if(key.toString.equals("Pen:London:13June2016"){
System.out.println("sales:" + mapper.get(key.toString);
}
}
}
die Abfrage in der salesDao (Speichern als "RecordSalesInfo") ist:
SELECT
rs.product AS product,
rs.store_name AS store,
rs.date AS date,
rs.product_id AS productId
FROM sales rs
ORDER BY rs.product,rs.store_name,rs.date
der Grund, warum ich Abfrage „nicht Graf (blabla), in dem product = 'a' und store_name = 'b' und date = 'c' "ist, weil der Benutzer die Eingabe sehr oft mit einem jSlider ändert (input = Produkt, Speicher, Datum), das bedeutet zu viele Abfragen. Also dachte ich, es ist besser, alle Ergebnisse von db zu nehmen und dann anzuzeigen, was der Benutzer braucht.
A) Gibt es einen besseren Weg, dies zu tun?
B) In der nächsten Phase wird der Benutzer geben Sie nur das Produkt und den Laden und ich habe die Liste der Verkäufe Datum zurückzubringen, wie folgt aussehen:
Pen - London (manuelle Eingabe) 12June2016 100 15June2016 30 19July2016 67
Mit dem, was ich bisher getan habe, kann ich Verkäufe nicht nur die Daten, die ich habe, und ich habe von der Hashmap für alle Termine (bestimmten Bereich) „suchen“. Ich denke, als eine Lösung, um den Schlüssel zu "product: storeName" eine bestehende Karte zu ändern und als Wert eine andere Karte, wo der String das Datum und die Integer die Menge der Verkäufe ist.
Wieder ist es eine bessere Möglichkeit, das zu tun?
danke für Ihre Antwort. Denkst du, was auch immer ich mit der Map mache, gibt es einen anderen Weg, es mit Java zu machen, oder der beste Weg ist die Verwendung von Abfragen? –