0

只是好奇,是date保留字 iSQLite吗?我有一个名为 date 的列,并尝试运行此查询:

DELETE FROM cases WHERE date <= date('now','-1 day')

通过做这个:

String query = "DELETE FROM cases WHERE date <= date('now','-1 day')";

        SQLiteDatabase db = this.getWritableDatabase(); 

        Cursor cursor = db.rawQuery(query, null);
        boolean found = cursor.moveToFirst(); 
        if(found) {
            int result = cursor.getCount();
            Log.w("DeleteOldCases: ", "Result: " + Integer.toString(result));
            db.close();
        }

但是,当调用moveToFirst. 但在我的数据库中,实际上有超过一天的行。任何人都可以解释这里有什么问题吗?

谢谢!

4

2 回答 2

0

是的,它似乎是一个保留字。

看:http ://www.sqlite.org/lang_datefunc.html

 date(timestring, modifier, modifier, ...) 

有一个游标形式的 DELETE 语句很奇怪。尝试拆分操作

SELECT * FROM cases WHERE date <= date('now','-1 day')

然后执行你的检查

SQLiteDatabase db = this.getWritableDatabase(); 
Cursor cursor = db.rawQuery(query, null);
boolean found = cursor.moveToFirst(); 
if(found) {
    int result = cursor.getCount();
    Log.w("DeleteOldCases: ", "Result: " + Integer.toString(result));
    db.close();
}

然后执行 DELETE 部分

DELETE FROM cases WHERE date <= date('now','-1 day')
于 2013-07-01T07:59:57.933 回答
0

这个问题很老了,但值得一个正确的答案。

不,date不是保留字。

您的代码的问题是您正在使用rawQuery()从表中删除的方法,这不是这样做的方法。
rawQuery()应该用于以Cursor对象的形式从表中返回行。
由于您的 sql 语句不返回任何行,因此该方法moveToFirst()返回false

您应该使用的是delete()返回已删除行数的方法:

int result = db.delete("cases", "date <= date('now', '-1 day')", null);
于 2022-01-16T12:32:06.257 回答