2016-04-28 13 views
1

Ich habe eine SQLite-Datenbank, die eine Tabelle von Aufgaben enthält, die eine Spalte von dueDates enthält. Ich möchte Daten filtern, die nach dem Datum von morgen liegen.Wie bekomme ich die Zeilen nach morgen?

Wenn morgen das Datum 29. April ist, sollte ich die Daten nach morgen bekommen. Ich möchte die Anzahl der Aufgaben, die übermorgen sind, bekommen.

Dazu habe ich die Zeichenfolge in ein Datum umgewandelt. Das Format ist:

Calendar calendar = Calendar.getInstance(); 

dateToday = calendar.getTime(); 
SimpleDateFormat df = new SimpleDateFormat("d MMM yyyy"); 
dueDateToday = df.format(dateToday); 

calendar.add(Calendar.DAY_OF_YEAR, 1); 
dueTomorrow = calendar.getTime(); 

dueDateTomorrow = df.format(dueTomorrow); 

und die Abfrage ist:

public int getPendingTasksLaterDays(String tomorrow) { 
    ArrayList<Task> conList = new ArrayList<Task>(); 


    String selectQuery = "SELECT * FROM " + TASK_TABLE + " WHERE " + KEY_TASK_STATUS + " = 1" + " AND " + KEY_DUE_DATE + " > '" + tomorrow + "'" ; 


    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor mCount= db.rawQuery(selectQuery,null); 

    if (mCount.moveToFirst()) { 
     do { 

      count = mCount.getInt(0); 
     } while (mCount.moveToNext()); 
    } 

    Log.d("query",selectQuery); 

    Log.d("count",String.valueOf(count)); 
    mCount.close(); 

    return count; 
} 

Aber die Abfrage funktioniert nicht für mich. Die Anzahl, die ich bekomme, ist 0. Was mache ich falsch?

+0

SQLite verwendet nicht 'd MMM yyyy' als Dateformat ohne benötigen. Weitere Informationen finden Sie im Abschnitt "Time Strings" in der [SQLite-Dokumentation] (https://www.sqlite.org/lang_datefunc.html). –

Antwort

0

Ändern Sie Ihre Abfrage wie diese

String selectQuery = "SELECT count(*) FROM " + TASK_TABLE + " WHERE " + KEY_TASK_STATUS + " = 1" + " AND " + 
     KEY_DUE_DATE + " > '" + tomorrow + "'" ; 
+0

Was ist die Änderung? @ Nazmul Hasan Masum –

+0

ja verwendet Zählfunktion. Ich probierte das, aber keine Zählung im Gegenzug sein 0 bekommen. Kann Datum nicht verglichen werden? Wie kann ich dieses Datum vergleichen? @ Nazmul Hasan Masum –

1

Ihre Anfrage können die date Funktion in SQLite verwenden, um alles nach morgen zu finden, aber das setzt voraus, dass die korrekte Schreibweise Ihrer Fälligkeit Spalte zumindest im Format YYYY-MM-DD gespeichert haben. (Andere Formate sind in der Verbindung).

SELECT COUNT(*) FROM tasks WHERE due_date > date('now', '+1 day'); 

Wenn Sie Ihre Daten nicht gespeichert werden korrekt in der Datenbank, dann, ja, Sie sehr wahrscheinlich werden 0 Ergebnisse.

Es ist auch erwähnenswert, dass Sie die Anzahl der Ergebnisse von einem Cursor mit der getCount Methode bekommen COUNT(*)

int count = db.rawQuery(selectQuery,null).getCount(); 
Verwandte Themen