【问题标题】:Delete all SQLite rows NOT IN specific rows删除所有不在特定行中的 SQLite 行
【发布时间】:2016-05-12 21:29:51
【问题描述】:

我的排行榜有一个数据库。目前,我将所有分数插入我的排行榜,并选择 5 个最高分数显示在我的应用程序上。我认为永远不要删除其他分数会占用太多空间,所以我想删除它们。我该怎么做?

这是我如何选择前 5 名的分数,如果分数相等,则按分数排名第一,按时间排名第二:

    public  Cursor gethmLeaderboard(SQLiteDatabase db){

    String[] columns = {TableInfo.LB_RANK, TableInfo.LB_SCORE, TableInfo.LB_TIME};

    Cursor c = db.query(TableInfo.TABLE_HM, null, null, null, null, null, TableInfo.LB_SCORE + " DESC, " + TableInfo.LB_TIME + " ASC", "5");
    return c;

}

以下是我创建表格的方式:

public String CREATE_HMQUERY = "CREATE TABLE " + TableInfo.TABLE_HM + "("
        + TableInfo.LB_RANK + " INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 1 ," + TableInfo.LB_SCORE +
        " INT,"+ TableInfo.LB_TIME + " VARCHAR );";

我想删除所有不在该查询中的行。我该怎么做?

我的尝试:

public String DEL_ALLBUTES = "DELETE FROM " +
        TableInfo.TABLE_HM + " WHERE " +
        TableInfo.LB_RANK + " NOT IN (SELECT " +
        TableInfo.LB_RANK + " FROM " +
        TableInfo.TABLE_HM + " ORDER BY " +
        TableInfo.LB_SCORE + " DESC, " +
        TableInfo.LB_TIME + " ASC LIMIT 5);";

采用这种格式:

db.rawQuery(DEL_ALLBUTES, null);

但是当我检查数据库时,仍然有很多行,所以它不起作用。

【问题讨论】:

    标签: android sqlite android-sqlite


    【解决方案1】:

    execSQL() 用于命令(所有不是SELECT 的)。
    rawQuery() 用于查询 (SELECT)。

    【讨论】:

    • 好的!我得到了不同的结果。现在我的 execSQL() 语句出现运行时错误
    • 似乎 db 为空...但我无法确定,因为我在该命令附近看不到任何上下文。
    • 我从 exec 语句中取出了 null ,不,它是 db.execSQL(DEL_ROWHM5);它有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多