【问题标题】:How do I delete the last row of a SQLite table in Android. I don't have an _id column如何在 Android 中删除 SQLite 表的最后一行。我没有 _id 列
【发布时间】:2015-04-10 12:22:07
【问题描述】:

好的,所以我有一个高分表。我有两列,球员姓名和得分.. 每次要向表中添加新分数时,我都会删除最后一行,将新分数和新玩家姓名放在最后一行,然后根据分数对表进行排序。 我无法删除分数最低的行,因为可能有多个条目具有相同的分数,我不想全部删除。

【问题讨论】:

  • 检查该表中存在多少行并将其存储在某个变量中并创建一个 if else 语句,如果它是最后一行,则删除 else continue 或做任何你想做的事情。

标签: android mysql sqlite


【解决方案1】:

您可能想要重建您的表并包含一个带有integer primary key autoincrement 的id 列。您可以使用该列做很多事情(here's 一个您可以查看的 SO 问题)。

无论如何,我不知道您的流程如何以及为什么需要删除最后一行,但这里有一个使用 ID 列来获取最后一行的示例(我认为这将是最新的插入,是什么如果您声明 ID integer primary key autoincrement 列,通常会发生这种情况):

public int LastInsert() {
    SQLiteDatabase db = this.getReadableDatabase();
    final String MY_QUERY = "SELECT MAX(" + colID + ") FROM " + myTable;
    Cursor cur = db.rawQuery(MY_QUERY, null);
    cur.moveToFirst();
    int ID = cur.getInt(0);
    cur.close();
    return ID;
}

从这里您可能只获得LastInsert 的结果并使用它来指示您的删除函数应该删除的内容。

Imo 你最好只更新最后一行,而不是删除并重新插入它的位置。像这样:

public int UpdateAcc(Account acc) {

    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(colName, acc.getName());
    cv.put(colScore, acc.getScore());
    return db.update(myTable, cv, colID + "=?", new String[]{params});

}

【讨论】:

    【解决方案2】:

    我不记得带有 sqlite 的 android 支持每个语句多个命令,但如果是这样,这可能会起作用:

    DELIMITER ;;
    SET @LastId = (SELECT ROWID FROM yourTable ORDER BY ROWID DESC LIMIT 1);;
    DELETE FROM yourTable WHERE ROWID=@LastId;;
    

    否则,您可以将其存储在整数变量中:

    SELECT ROWID FROM yourtable ORDER BY ROWID DESC LIMIT 1;
    

    然后使用该变量运行下一行

    DELETE FROM yourtable WHERE ROWID=@ThatIntegerHere;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多