2013-07-04 120 views
0

我有一個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')

有人可以看到我做錯了去除呢?

+1

比較'datetime()'和'date()'結果應該可行,但不是一個「乾淨」的解決方案。我會推薦使用Java類'Calendar',尤其是'GregorianCalendar',它使用方法'getTimeInMillis()'和'setTimeInMillis()'將時間存儲爲數據庫中的長整數 –

回答

0

僅對真實查詢(以「SELECT」關鍵字開頭的SQL語句)使用rawQuery()。改爲使用execSql()

+0

我會試試這個,但是你想要真正的疑問?還應該提到,這並沒有做到這一點。 –

+0

@TobiasMoeThorstensen真正的查詢以「select」開頭(編輯回答) –

+0

謝謝,順便說一句,我沒有downvote你的答案,謝謝你的提醒! –