【问题标题】:Represent LinkedList in SQLite database表示 SQLite 数据库中的 LinkedList
【发布时间】:2026-02-10 18:05:03
【问题描述】:

我想在我的 Android 应用中表示一个播放列表。如果播放列表为空,我的项目仅按日期显示。如果播放列表包含几个项目,则应按顺序显示播放列表,然后是其余项目(仍按日期)。

但是,我不确定如何有效地建模。我怎样才能以一种糟糕的方式构建我的数据库,以便在播放列表中插入项目(到任何位置)变得容易,并且仍然以快速(且合理简单)的方式选择它们。

示例我有一个包含项目 A、B、C、D、E、F、G 的列表。首先项目是按顺序显示的:

  A,B,C,D,E,F,G

用户现在将 F 和 D 添加到他的播放列表中。这些项目现在应该按以下顺序显示:

 F,D,A,B,C,E,G

【问题讨论】:

  • 从 items_table 中选择 *

标签: android sqlite data-structures linked-list simplecursoradapter


【解决方案1】:

如果您想根据某种时间戳对项目进行排序(例如,您希望最先出现最新的),那么只需在表中添加一个时间戳列,例如创建日期或更新日期/时间。然后,在查询表时,使用它进行排序。

SELECT * FROM ITEMS_TABLE
ORDER BY CREATION_DATETIME DESC;

【讨论】:

    【解决方案2】:

    我怎样才能以这样一种方式来构建我的数据库,以便于 插入项目(到任何位置)

    创建经典的heap table,提供快速插入 - “插入到您可以插入的第一个位置。”

    并且仍然以快速(且合理简单)的方式选择它们。

    所以很可能您需要创建index。索引是在最常出现在 where clause 后面的列上创建的。通过创建索引也是 b+ tree 创建的,所以当你想创建任何索引时应该小心。

    还有更多方法,但它强烈依赖于数据源类型,例如 Oracle 提供了多种类型的表,具有各种优点和缺点。

    您将选择的具体方法还取决于数据库 - 对数据库的要求、表中的平均记录数等等。

    【讨论】:

    • 这听起来不错,但是您将如何创建一个 select 语句以正确的顺序获取这些项目?没有任何特殊的模块或 Android 不支持的东西。
    • 所以有时需要做出“妥协”。你刚才描述的你是对的,它不可能在db中实现。所以我的第一个想法是进行经典的有序选择,但如果你在播放列表中有一些项目 - 所以从他们那里获取一些特定的数据(例如 id),以便能够执行下一个查询,选择播放列表中的项目(将它们保存到经典中列表)和第二个查询,它将从数据库中选择其他项目(项目将保存到上一个选择的列表中)。
    【解决方案3】:

    我正在使用这个解决方案。我在表中添加了一个额外的列,说“序列”,它将具有要获取的记录的订单号..同时通过“序列”获取表的顺序,您将获得所需的顺序。

    但是插入一行或删除一行需要对序列进行大量更新。

    【讨论】: