Android SQLite decremente ID



我有一个像这样的SQLite数据库:

    private static final String CREATE_BDD = 
        "CREATE TABLE " + TABLE_NOTE + " ("
        + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + COL_TITLE + " TEXT NOT NULL, "
        + COL_NOTE + " TEXT NOT NULL, "
        + COL_COLOR + " TEXT NOT NULL);";

数据库存储了我可以通过 ID 识别的笔记。当我从数据库中删除注释时,我希望所有 ID 都优于已删除注释的 ID 递减 1,然后我可以保留像"1、2、3、4"这样的列 ID 而不是"1、3、4"当我删除 ID 为 2 的笔记时。

因为我使用它来阅读我所有的笔记(使用 BDDManager 我的 DAO),并且我不想使用列表来获取所有笔记:

    private void readAllNotes(){
    int i = 1;
    Note note = new Note();
    BDDManager.open();
    do{
        note = BDDManager.getNoteWithId(i);
            if(note != null){
                addCard(note); //here I add the note to a new TextView
                i++;
            }
    }while(note != null);
       BDDManager.close();
}   

当我删除笔记时,我在删除的 ID 后无法读取,因为它返回 null 并在删除笔记后停止阅读笔记

以下是我删除注释的方法:

    public int removeNoteWithId(int id){
    return bdd.delete(TABLE_NOTE, COL_ID + " = " +id, null);
}

首先,当做这样的事情时,我的第一直觉是你应该锁定桌子。其次,你可以使用你的 DAO 循环遍历所有的笔记,让每个笔记自己更新(或者调用 DAO)。

public int removeNoteWithId(int id){
    for(Note n : notes)
    {
        n.decrementID();//OR decrement(n.getID);
    }
    return bdd.delete(TABLE_NOTE, COL_ID + " = " +id, null);
}

此外,与其一直更改 id,不如考虑为位置排序增加一个列。这样,您可以使用 id 来确保唯一性和索引,并使用另一列进行排序。

主键一旦创建,可能无法更改。为什么你不尝试使用 从TABLE_NOTE中选择 * ?获得结果后,根据您的逻辑调用添加卡(注意)。

抱歉回复

很长,晚上在这里(法国)

最后我确实像豆5说的那样。我是一个菜鸟:p我只是在搜索"自动"的东西,也许是为了避免数据库中的一些I/O

private void updateAllId(int id){
    Note note = new Note();
    do{
        note = getNoteWithId(id+1);
        if(note != null){
            note.setId(id);
            updateNoteId(id++, note);
        }
    }while(note != null);
}
public int updateNoteId(int id, Note note){
    ContentValues values = new ContentValues();
    values.put(COL_ID, note.getId());
    return bdd.update(TABLE_NOTE, values, COL_ID + " = " +id, null);
}

谢谢大家 !问题已解决

最新更新