好的,所以我有一张高分表。我有两个栏目,球员姓名和得分...... 每次要将新分数添加到表格中时,我会删除最后一行,将新分数和新玩家名称放在最后一行,然后根据分数对表格进行排序。 我无法删除得分最低的行,因为可能有多个条目具有相同的分数,我不想删除所有这些。
答案 0 :(得分: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});
}
答案 1 :(得分:0)
我不记得使用sqlite而不是每个语句支持多个命令,但如果是这样,这可能会有效:
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;