我有一个包含表|ID|NAME|
的数据库,我有一个删除表中一行的函数。
public void deleteWord (int id ){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_WORDS, KEY_ID + "="+id, null);
db.close();
}
这就是我创建表格的方式
String createSetTable =
"CREATE TABLE "+TABLE_SETS+"("
+KEY_SET_ID+ " INTEGER PRIMARY KEY, "
+KEY_SET_NAME+ " TEXT) ";
db.execSQL(createSetTable);
问题是这个函数删除了一个具有给定ID的行,并且该ID像数组一样保持为空。例如我有一个表
| 1 |麦克|
| 2 |简|
| 3 |戴夫|
| 4 |凯特|
使用'deleteWord(2)后,我得到类似的东西,程序的整个算法都搞砸了。
| 1 |麦克|
| 3 |戴夫|
| 4 |凯特|
那么每次删除行时,我该怎么做才能更新我的ID?是否有自动执行的特殊查询?
答案 0 :(得分:2)
你的身份证不应该改变。 ID应该始终坚持各自的行。我建议你改变你的逻辑以期望那些ID保持不变并让数据库保持独立,这是正确的做法。
如果您肯定必须更改这些ID,那么请不要删除primary key
语句,如下所示,不要将您的ID列作为主键:
String createSetTable =
"CREATE TABLE "+TABLE_SETS+"("
+KEY_SET_ID+ " INTEGER, "
+KEY_SET_NAME+ " TEXT) ";
db.execSQL(createSetTable);
但是现在,每次插入或删除一行时,您都必须使用正确的ID迭代并更新所有行,这也是我不推荐的繁琐且低效的任务。
答案 1 :(得分:0)
自动增量中应用于行ID的问题,如此处提及
http://www.sqlite.org/autoinc.html
要解决此问题,请尝试创建另一个ID字段,将其作为主键处理,如
ID | EmlpoyeeID | EmployeeName
答案 2 :(得分:0)
我不确定我是否正确理解,但现在就去了。
假设您要编辑PK,以便更改的表格最终结束:
迈克,1 2,戴夫 3,凯特这个问题可以阐明这个问题:How to update primary key
您不应该更改主键的值,因为这会导致其他表格上的外键指向错误的项目。但是也可以更新外键。小心翼翼。