【问题标题】:New to Android - Is _id a must for databases?Android 新手 - 数据库必须使用 _id 吗?
【发布时间】:2014-07-29 05:06:05
【问题描述】:

我有一个已经在 iOS 上运行的应用程序,其数据库使用复合主键。为便于讨论,假设“CID”和“RID”组成了复合 pk,结果如下所示:

CID-RID
F6uuDTEU1c-1
F6uuDTEU1c-2
F6uuDTEU1c-3

但是,在某些情况下 CID 列会被更改,从而重置 RID 列。例如:

CID-RID
...
F6uuDTEU1c-4
F6uuDTEU1c-5
WQq6JnyrDI-1
WQq6JnyrDI-2
WQq6JnyrDI-3
...etc

这些数据库将跨平台(ios - android)共享,并且不能返回并编辑当前的 ios 结构。当我的 pk 在 Android 上运行时,如果没有 _id 列,我会遇到什么问题?

我在这里找到了this SO - 这似乎表明 db 本身不必有 _id 列,只是...

“游标的结果集必须包含_id,而不是游标本身。”

...但我可能读错了。非常感谢任何输入/帮助。

PS:我已经看过几个(我认为是)类似的问题 hereherehere

【问题讨论】:

    标签: android database sqlite


    【解决方案1】:

    您可以随意使用任何您想要的数据库架构。 Android 不会在那里施加任何额外的限制。

    仅当您使用 CursorAdapter 时,Cursor 才需要 _id 列。任何应用程序都可以在不使用CursorAdapter 的情况下编写,它只是为了提供一些便利。 sqlite 表总是有一个 ROWID 列,如果表有一个别名到 INTEGER PRIMARY KEY 列。您始终可以将其选为_id,例如SELECT rowid AS _id ... 如果需要。

    【讨论】:

    • 非常感谢您的回复,@laalto!有趣的是,即使我不创建 rowid 并将完全不同的列(或本例中的列)设置为主键,rowid 也会存在吗?另外,如果没有 cursoradapter 的便利,管理数据库有多难?你知道任何解释它是如何工作的教程吗?我很高兴发现它们提供的简单性。
    • 是的,所有行都有一个 rowid,如果 pk 是整数,它将与 pk 相同。您将使用 cursoradapter 将游标数据映射到适配器视图,例如列表视图。如果您编写自己的自定义适配器来执行映射,则代码会稍微多一些。
    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2021-01-06
    • 2021-12-25
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    相关资源
    最近更新 更多