【问题标题】:SQLite id row not following sequential order after deleting rows删除行后,SQLite id 行不遵循顺序
【发布时间】:2018-08-13 10:51:09
【问题描述】:

我正在尝试制作一个笔记应用程序,而我编写应用程序删除特定行的方式就是这样 -

FIRST -如果用户从 recyclerView 中点击任何 cardView,第一个 Activity 将使用 getAdapterPosition() 转发 cardView 位置。

SECOND - 第二个活动接收 cardView 的位置,从 SQLite 数据库中删除特定行,我调用了一个称为“totalNotes()”的方法,它将返回 SQLite 中存在的总行数数据库。最后,为了删除行,我用 getAdapterPosition() 减去从 'totalNotes()' 方法收到的数字。

问题 - 我编程的方式只有在数据库中的行按顺序排列时才有效。但是,当用户想从 5 行中删除第 3 和第 2 行时,剩余的行是 1,4 和 5。如何使数据库在删除行后自动执行顺序?

我在网站上查看了“几乎”类似的问题,但是当我尝试在我的代码中实现时它们失败了。我是 Android 开发新手。

[演示图片][2]

如何分配顺序 ID?

How my app looks like

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    您不应该基于行号顺序。几乎(如果不是全部)所有数据库在自动增量字段上都具有相同的行为。当您从数据库中获取数据时,您还需要获取 ID,并将 ID 保留在 APP 中,因此在从数据库中删除时,您将根据该 ID 删除:

    id = note.noteID;  /// Selected note (noteID) to be deleted. 
    
    --------
    
    dbHandler!!.deleteNote(id);
    
    ---------
    
    // Here you bind your note to your viewHolder
    fun bindItems(note: UserNotes) {
        noteTitle.text = note.noteTitle
        noteText.text = note.noteText
        noteText.noteId = note.noteID;
    
    }
    

    【讨论】:

    • 能不能说的详细点?我还添加了一个读取 ID 的代码。我将在这里发布我的代码。
    • 我编辑了答案。当您选择要删除的卡片时,您传递的不是列表中的位置,而是 noteID,然后您使用该 ID 从数据库中删除它。
    • 如果您查看我在 for 循环中的 MAIN_ACTIVITY 代码以及 PEDIA_DATABASE 的 readAllNotes(),我也在获取 ID。我很困惑,因为我不明白当点击 cardView 时我将如何在没有 getAdapterPosition() 的情况下获取相应的数据
    • 与使用 noteText 和 noteTitle 的方式相同,您可以使用 noteID,并将其传递给意图。您为此使用 ViewHolder 类。
    • 对不起,我不明白你的意思。我必须使用 noteID = getItemID() 吗?
    【解决方案2】:

    使用顺序 ID 不好,因为当您删除带有 Id = 5 的记录时,您添加到表中的下一条记录也不会是 Id = 5,而是 Id = 6,所以它会继续迟早会给你带来麻烦。

    @Simion 建议的方式是:

    1. 您要求提供所有数据(即所有笔记)
    2. 当您选择一个注释时,您要求输入该注释的Id,并将其保存在一个变量中。
    3. 如果用户决定删除该注释,您应该执行deleteNote(noteId),这样您就可以使用任何您想要的作为Id 并且您不依赖Ids 是连续的(也就是说,正如我之前说过,通常是个坏主意)

    【讨论】:

    • 要删除顺序ID,我必须删除'KEY_ID'“INTEGER PRIMARY KEY”吗?还有一件事我不明白,我怎么知道点击了哪个特定的 cardView 以及如何获取该 cardView 的对应 ID?
    猜你喜欢
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    相关资源
    最近更新 更多