gpt4 book ai didi

java - SQLite 项目的递归删除

转载 作者:太空狗 更新时间:2023-10-29 16:23:39 24 4
gpt4 key购买 nike

SQLite 数据库示例:

** 我没有创建数据库,它是 Android 书签数据库,我使用 contentproviders 访问它。

** 根据我在一些搜索后的理解,SQLite 不支持外键约束但触发器是可能的 - http://www.sqlite.org/cvstrac/wiki?p=ForeignKeyTriggers

FOLDER 列 -> 0 = 不是文件夹(假),1 = 文件夹(真)

PARENT 列 -> 包含其文件夹的 ID

ID  TITLE     FOLDER   PARENT
1 folder1 1 0
2 item1 0 1
3 item2 0 1
4 folder2 1 1
5 item1 0 4
6 item2 0 4
7 folder3 1 4
8 item1 0 7
9 item2 0 7

...等等

在我的 Android 应用程序中,我尝试递归地从 SQLite 数据库中删除项目。我有第一个文件夹的 ID,我想循环查找它的所有内部项目(更多文件夹和项目)。

例如 - 我有 ID=1,所以我可以通过请求查询其父级为 ID=1 的所有项目、获取项目 ID 然后删除来轻松删除 ID 2 和 3。

问题是我不知道如何删除 ID=4 及其内部项目(item1、item2 和 folder3),然后删除 folder3 内部项目。

希望得到一些帮助!已经尝试了几个小时:\

谢谢!

最佳答案

听起来您想使用 ON DELETE CASCADE在你的“ parent ”栏上。这样,当父级被删除时,所有将其指定为父级的文件夹和文件也将被删除。然后,此结果将“级联”到您的数据库中。

所以你会像这样创建你的表:

CREATE TABLE files (id PRIMARY KEY AUTOINCREMENT, title TEXT, folder INTEGER CHECK(FOLDER EQUALS 0 OR FOLDER = 1), parent REFERENCES id);

就是这样。现在每次删除父文件夹时,它的所有子文件夹都将被删除。您无需执行任何其他操作。

附言具有 boolean 属性(如本例中的文件夹列)通常被认为是不好的做法。在您的情况下,最好将文件夹和文件放在不同的表中,因为它们是不同的东西。这叫做 normilisation .就是说,我可以看到有人提出这样的论点,即您现在设置事物的方式仍然可以,因为从技术上讲,文件夹只是设置了特殊标志的文件。不过,您可能仍然应该考虑创建不同表的想法。

关于java - SQLite 项目的递归删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com