【问题标题】:Do i have to use _ID as a SQlite primary key? and does it have to be an INT? (Android Dev)我必须使用 _ID 作为 SQlite 主键吗?它必须是INT吗? (安卓开发)
【发布时间】:2010-11-30 12:55:50
【问题描述】:

这可能是一个愚蠢的问题,但我还没有找到答案。

我想使用具有我自己唯一名称的 TEXT 列作为表中的主键。 在我的项目中,定义它的一小段代码看起来像这样:

...blahblah..."CREATE TABLE " + CAT_BUD_TAB + " (" + CAT_ITEM_ID + "_ID TEXT PRIMARY KEY,    "...blahblah..

这会按我的意愿工作吗?或者也许我需要使用“AS ID”?我只看到带有_ID作为自动递增整数的单个表。这也是另一个表中的外键,但由于我设计了我的数据库,我已经阅读了更多信息,我不确定使用它是否真的很重要安卓和 SQLITE?

感谢下面的海报,但我有点慢,不确定我是否正确应用了信息,你能检查一下吗?

如果我有这样的创建语句:

"CREATE TABLE " + CAT_BUD_TAB + " (" + CAT_ITEM_ID + " TEXT PRIMARY KEY, " + 
    IN_OUT + " TEXT, " + BUDGET_AMOUNT + " REAL, " + ACTUAL_AMOUNT_SPENT + " REAL, "
    + AMOUNT_STRAYED + " REAL, " + OVERBUDGET_TF + " INTEGER, " + AUTOSPEND_TF + 
    " INTEGER);"

然后有: db.execSQL("SELECT ID, ID AS CAT_ITEM_ID")

然后我可以互换使用它们吗?我什至在附近吗?哈哈对不起我在努力!

【问题讨论】:

    标签: android database sqlite


    【解决方案1】:

    您可以根据需要创建和定义表格,但如果您必须通过 CursorAdapter 使用表格,那么如果不进行调整就无法工作。

    CursorAdapter: The Cursor must include a column named "_id" or this class will not work.
    

    您必须始终发出select col1 as _id ... 才能工作。

    所以建议在表模式中使用_id,如果您想使用其他名称,您可以这样。 select _id, _id as customname ... 所以选择两次不同名称的 _id 列。

    【讨论】:

    • 感谢您的回复!但恐怕我还是有点慢,如果你能在我原来的帖子中检查我对你建议的使用情况,我真的很感激!
    • 您的代码看起来不错,但该字段必须是 _ID 而不是 ID
    【解决方案2】:

    你可以有任何你想要的作为主键。

    但是,例如,如果您想使用 CursorAdapter 自动显示来自游标查询的项目,您需要有一个名为 _ID 的整数列,因为这里使用了它。

    但是,如果您不打算将其用于您的桌子,您可以随心所欲!

    【讨论】:

    • 谢谢!但我认为我需要一个 CursorAdapter,所以我必须有一个整数吧。好的,干杯。我可以拥有 INT _ID 但并没有真正使用它,也就是说,我可以说“检索此 TEXT 列 ==“食物”的整个记录​​,对吗?不管怎样,谢谢你的帮助!
    【解决方案3】:

    _id 在 sqlite create 中必须是 int 类型(在 Java 中是 long)。各种类都假设。因此,您不能将 UUID 用作主键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多