2016-08-09 5 views
-1

zusammenfasst Ich arbeite an einem Projekt mit Content Provider für DB.
Ich kann alle Zeilen mithilfe der unten genannten Abfrage abrufen.
Mein Problem ist, ich möchte eine Spalte für alle abgerufenen Zeilen zusammenfassen.Content Resolver - Wie man einen Spaltenwert für alle Zeilen mit der Abfrage

Ich Abfrage wie:

String query = WorkTable.ENTRY_TIME + " = ?" 
String projection = "new String[]{WorkoutLogTable.STEPS}"; 
Cursor cursor = getContentResolver() 
       .query(
         LogProvider.WORK_LOG, 
         projection, 
         query, 
         new String[]{dateString}, 
         null 
       ); 

ich die Summe von WorkoutLogTable.STEPS wollen. Die Projektion benötigt string[] als Parameter. Wie kann ich den STEPS-Wert zusammenfassen?

bearbeiten

benutzte ich einen Vorsprung:

String projection = new String[]{"sum(WorkoutLogTable.STEPS}) as total"}; 

Aber es funktioniert auch nicht.

Lösung:

ich wurde, indem sie den gesamten Teil als String einen Fehler machen.
So habe ich so gelöst:

String projection = new String[]{"sum(steps) as total"}; // steps is my column name and I was fetching it by WorkoutLogTable.STEPS which was wrong 

Oder eine andere Lösung kann mit Dynamic-String (aus cricket_007 Antwort)

+0

hat Wenn Sie alle Zeilen bekommen, könnte man nicht einfach die Spaltensumme von Java? –

+0

Das kann ich wiederholen Cursor, aber es ist gut, wenn ich direkte Summe aus Abfrage. Weil es mehrere Zeilen geben kann und ich nicht über zu viele Zeilen iterieren möchte. – Pankaj

+0

Die "SUM" -Funktion würde auch alle Zeilen der Datenbank durchlaufen, aber ... Anyways, Sie könnten versuchen, Ihre Projektion '" sum ("+ WorkoutLogTable.STEPS +") als total "' zu machen. Java-Syntax innerhalb einer SQL-Anweisung ist nicht sinnvoll. –

Antwort

0

Ist das ein Content-Provider von einer anderen Anwendung sein? Wenn Sie den Inhaltsanbieter schreiben, würde ich empfehlen, dass Sie eine weitere URL speziell für die Zusammenfassungsabfrage hinzufügen und Ihre Summenfunktion in der Abfrage im Inhaltsanbieter ausführen. Verwenden Sie dann die alternative URL, wenn Sie den Content-Resolver durchlaufen.

+0

Wenn Sie eine Frage zu dem haben, was ich vorschlage, geben Sie den Code des Inhaltsanbieters ein und ich werde meine Antwort aktualisieren. –

+0

Nein Es ist nicht von einer anderen App.Ich möchte nur die Spalte für alle Zeilen zusammenfassen. Ich kann die Zeilen holen. – Pankaj

2

Projektion benötigt string[] als Parameter,

Rechts, also warum ist Ihre projection Variable ein String? Diese Anweisung wird nicht einmal kompiliert.

String projection = "new String[]{"sum(WorkoutLogTable.STEPS}) as total"}; 

Vielleicht hast du das gemeint?

String[] projection = new String[] { "sum(" + WorkoutLogTable.STEPS + ") as total" }; 

Sie benötigen ein aktuelles String[]-Objekt zu verwenden, keine String, die den Inhalt von "String[] { ... }"

String selection = WorkTable.ENTRY_TIME + " = ?" 
String[] projection = new String[] { "sum(" + WorkoutLogTable.STEPS + ")" }; 
String[] selectionArgs = new String[] { dateString }; 

Cursor cur = getContentResolver().query(
       LogProvider.WORK_LOG, 
       projection, 
       selection, 
       null, null); 
+0

Seine String [], aber es gibt nur ein Feld. Array kann auch einen einzelnen Wert haben. – Pankaj

+0

Ja, Arrays können einzelne Werte haben, aber Ihre Verwendung der Methode [query] (https://developer.android.com/reference/android/content/ContentResolver.html) ist nicht korrekt. –

+0

Kannst du mir zeigen, wie man dann schreibt? – Pankaj

Verwandte Themen