【问题标题】:Order of insert in android databaseandroid数据库中的插入顺序
【发布时间】:2011-01-11 12:13:10
【问题描述】:

我想知道如何在数据库的开头插入一个元素?我想这样做是因为: a)我想将元素(ListView)显示为“最后插入在顶部并首先插入在底部”(如堆栈) b)我想限制我的数据库中的元素数量。当添加新元素(超过限制)时,我可以将新元素(在开头)并删除最后一个元素。 (还不知道如何删除最后一个元素)。

我一直在寻找解决方案,但我开始怀疑我是否可以控制元素的插入方式。如果不是,我正在考虑从头到尾显示数据库。但实际上并不知道该怎么做,因为光标总是设置在数据库的开头。如果可以实现这一点,我可以通过删除第一个元素来解决 b)(同样不知道如何实现这一点)。

【问题讨论】:

    标签: android database insert


    【解决方案1】:

    每个 SQLite 表的每一行都有一个 64 位有符号整数键,用于唯一标识其表中的行。这个整数通常称为“rowid”

    要最后插入顶部,最后插入底部......

    SELECT * from mytable order by ROWID desc;
    

    阅读更多关于 ROWID here

    并且,删除最旧的:

    DELETE from mytable WHERE ROWID = (SELECT MIN(ROWID) FROM mytable);
    

    如果您使用 ROWID,则不必修改现有表。并且,ROWID 的值是有保证的。

    【讨论】:

    • 感谢您的回答。但是,我收到您发布的删除命令的语法错误。我仔细检查了一下,这与我的(将 mytabel 名称和标记用于 rowid 列)相同。你确定这是正确的吗?
    • SQL 中“删除”的语法为:DELETE FROM table_name WHERE some_column=some_value。所以你需要把 FROM 关键字放在 'mytable' 之前。
    • 好的,删除后缺少“来自”。它的工作原理谢谢:> 编辑:没有注意到你的评论安东尼:>
    • 我已经编辑了删除语法。感谢安东尼指出。 :)
    【解决方案2】:

    您可以在将记录插入数据库时​​存储timestamp(作为新字段)。然后删除最旧的记录,如果它超过限制(例如,使用MAX SQL 关键字)。您可以通过使用您的timestamp 字段对DESC 进行排序来按时间倒序显示记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-07
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 2011-09-25
      • 1970-01-01
      相关资源
      最近更新 更多