2017-09-10 3 views
1

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?

Antwort

2

Was ich tun würde, ist, dass ich nicht eine Karte halten/halten, eher werde ich die Ergebnisse wie die Abfrage Änderungen holt basierend auf dem JSlider usw.

Sie können eine Sache tun, dass, wenn eine Abfrage gesendet wird Bis die Ergebnisse verfügbar sind, können Sie Ihren Jslider deaktivieren und einen Spinner anzeigen, der den Benutzer darüber informiert, dass die Verarbeitung läuft.

Sobald das Ergebnis verfügbar ist, aktivieren Sie den Schieberegler und ausblenden Sie den Spinner.

Um alle Daten in der Karte zu haben, scheint keine gute Idee zu sein. Es wird ein getrennter Datenzustand sein.

+0

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

Verwandte Themen