删除行时重置所有主键字段

时间:2014-04-15 06:47:07

标签: android sqlite

在我的Android应用程序中,我有一个删除SQLite数据库中的行的方法。

以下是代码:

public void deleteRow(int id, MyDatabase db, String table) {
        SQLiteDatabase writableDB = db.getWritableDatabase();
        writableDB
                .delete(table, "_id = ?", new String[] { String.valueOf(id) });
        writableDB.close();
    }

当我执行此方法时,该id下的行将被删除,并且其内容保持为空。我需要用下一行替换该行,依此类推。 (重置主键?)帮助?

3 个答案:

答案 0 :(得分:1)

而不是使用数据库进行随机选择。你可以

如果您在

中显示它

ListView :生成一个小于数据源大小的随机数并获取该索引中的元素并从数据源获取“ID”或“主键”并删除记录形成数据库并更新列表。

不使用任何ListView :您可以将主键保存在ArrayList中并生成一个小于arrayList大小的随机数,并获取给定索引处的“主键”值并使用从数据库中删除数据并更新ArrayList的主键。

答案 1 :(得分:1)

如果记录的实际顺序无关紧要,您只需将 last 记录移动到已删除记录的位置:

db.execSQL("DELETE FROM " + table + " WHERE _id = " + id);
long lastID = DatabaseUtils.longForQuery(db, "SELECT MAX(_id) FROM " + table, null);
if (lastID > id)
    db.execSQL("UPDATE " + table + " SET _id = " + id + " WHERE _id = " + lastID);

答案 2 :(得分:0)

我不建议更改主键,因为它是唯一标识符。 如果要在列表视图中显示数字,请使用适配器;一个cursoradapter,在bindview方法中,使用int x = getCursor()。getPosition()+ 1; 获取要使用的视图,并将其设置为在将其转换为字符串后使用x变量...