Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 删除行时重置所有主键字段_Android_Sqlite - Fatal编程技术网

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

Android 删除行时重置所有主键字段,android,sqlite,Android,Sqlite,在我的android应用程序中,我有一个删除SQLite数据库中一行的方法 代码如下: public void deleteRow(int id, MyDatabase db, String table) { SQLiteDatabase writableDB = db.getWritableDatabase(); writableDB .delete(table, "_id = ?", new String[] { String.

在我的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下的行被删除,其内容保持为空。我需要用下一行替换那一行,以此类推。(重置主键?)帮助?

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

如果您正在以

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


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

如果记录的实际顺序无关紧要,您可以将最后一条记录移动到已删除记录的位置:

db.execSQL(“从“+table+”中删除,其中_id=“+id”);
long lastID=DatabaseUtils.longForQuery(db,“从”+表中选择最大值(_id),null);
如果(lastID>id)
db.execSQL(“更新”+table+”设置_id=“+id+”其中_id=“+lastID”);

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

我想这是不可能的。如果你能解释你为什么需要这个。也许我们可以想出一个替代的解决方案。我有一个表,我可以从中使用ID随机选择一些元素。因此,一旦选择了一个元素,它就会被删除,这样就不能再选择它了。当它被删除时,我需要重新创建新的ID。示例:首先我选择元素6,然后它将他从表中删除,下次如果我选择6,我将得到元素7。这就是我需要的。谢谢如果秩序很重要怎么办?这不是问题的重点。如果你有实际问题,问一个新问题。