【问题标题】:Android SQLite decremente IDAndroid SQLite 递减 ID
【发布时间】:2013-10-12 23:47:40
【问题描述】:

我有一个这样的 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,然后我可以将列 ID 保持为“1、2、3、4”而不是“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);
}

【问题讨论】:

    标签: android sqlite integer decrement


    【解决方案1】:

    首先,当做这样的事情时,我的第一直觉是你应该锁定桌子。其次,您可以使用您的 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 来确保唯一性和索引,并使用另一列进行排序。

    【讨论】:

      【解决方案2】:

      主键创建后可能无法更改。您为什么不尝试使用 SELECT * FROM TABLE_NOTE; ?根据您的逻辑获得结果调用 addcard(note) 后。

      【讨论】:

        【解决方案3】:

        抱歉回复太长,晚上在这里(法国)

        最后我确实像 bean5 说的那样。 我是菜鸟: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);
        
        }
        

        谢谢大家!问题解决了

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多