服务删除旧的x天SQLite数据库中的条目

问题描述:

我有一个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()'将时间存储为数据库中的长整数 –

仅对真实查询(以“SELECT”关键字开头的SQL语句)使用rawQuery()。改为使用execSql()

+0

我会试试这个,但是你想要真正的疑问?还应该提到,这并没有做到这一点。 –

+0

@TobiasMoeThorstensen真正的查询以“select”开头(编辑回答) –

+0

谢谢,顺便说一句,我没有downvote你的答案,谢谢你的提醒! –