删除android SQLite中的行

时间:2014-01-17 19:03:43

标签: java android sql sqlite

我有一个包含表|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?是否有自动执行的特殊查询?

3 个答案:

答案 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

您不应该更改主键的值,因为这会导致其他表格上的外键指向错误的项目。但是也可以更新外键。小心翼翼。