我有一個Service
這將清理一些文件,並執行一些SQL查詢。這個特定的SQL查詢應該刪除x天以前的條目。我的方法,這樣做,是這樣的:服務刪除舊的x天SQLite數據庫中的條目
public boolean deleteOldCases(int days) {
String deleteQuery = "DELETE FROM " + TABLE_CASES + " WHERE " + DATE + " <= date('now','-" + days + " day')";
Log.d("Delete Query: ", deleteQuery);
SQLiteDatabase db = this.getWritableDatabase();
db.rawQuery(deleteQuery, null);
db.close();
return true;
}
當我將條目添加到我的數據庫,我不喜歡這樣寫道:
public void addCase(Case c) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_ID, c.getCaseNumber());
values.put(STATUS, "");
// Inserting Row
db.insert(TABLE_CASES, null, values);
db.execSQL("Update " + TABLE_CASES + " Set " + DATE + "=datetime() where " + KEY_ID + "= '" + c.getCaseNumber() + "';");
db.close(); // Closing database connection
}
這種方法是從我的服務調用,我可以通過驗證記錄該方法被調用。所有這些數據在ListView中顯示給用戶,這顯然有效。但舊的條目並不刪除..
我懷疑這是因爲我保存的情況下與,並試圖與<=date('now', '-1 day')
有人可以看到我做錯了去除呢?
比較'datetime()'和'date()'結果應該可行,但不是一個「乾淨」的解決方案。我會推薦使用Java類'Calendar',尤其是'GregorianCalendar',它使用方法'getTimeInMillis()'和'setTimeInMillis()'將時間存儲爲數據庫中的長整數 –