服务删除旧的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')
有人可以看到我做错了去除呢?
仅对真实查询(以“SELECT”关键字开头的SQL语句)使用rawQuery()
。改为使用execSql()
。
我会试试这个,但是你想要真正的疑问?还应该提到,这并没有做到这一点。 –
@TobiasMoeThorstensen真正的查询以“select”开头(编辑回答) –
谢谢,顺便说一句,我没有downvote你的答案,谢谢你的提醒! –
比较'datetime()'和'date()'结果应该可行,但不是一个“干净”的解决方案。我会推荐使用Java类'Calendar',尤其是'GregorianCalendar',它使用方法'getTimeInMillis()'和'setTimeInMillis()'将时间存储为数据库中的长整数 –