如何为多列主键获取唯一的_id列?

如何为多列主键获取唯一的_id列?

问题描述:

根据一些博客,如http://reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/,甚至在这里的一些下流道。如何为多列主键获取唯一的_id列?

将数据库包含到项目之前的第一步是将表的主ID字段重命名为“_id”,以便Android知道绑定表的id字段的位置。

应该如何处理具有组合主键的表格 假设我正在创建产品ID和商店ID之间的关系以分配其价格。

CREATE TABLE `Products-Stores` (
    `product` INTEGER NOT NULL, 
    `store` INTEGER NOT NULL, 
    `price` INTEGER NOT NULL, 
    PRIMARY KEY(product,store) 
); 

没有必要重命名数据库中的任何列。 SQL允许列别名是这样的:

SELECT integer_primary_key AS _id 
    ... 

是必要的唯一情况是,当你使用的是ListAdapter显示从您的数据库查询光标的内容。您必须在游标中有一个名为“_id”的整数主键列才能这样做

更好的是,每个SQLite数据库表都有一个名为“rowid”的隐式列。你甚至不必拥有自己的整数主键列。只要使用ROWID,就像这样:

SELECT rowid AS _id 
    ... 

编辑,包括@ CL的工作说明JOINS

显然,这一招是行不通的,对于很多类型的联接。只要rowid在连接中的所有行上都是唯一的,但它工作正常。

+0

只要其值在查询结果的所有行中都是唯一的,就可以使用某个表中的'rowid'。对于许多联接来说这是真的。 – 2014-10-02 07:57:37

+0

@CL是的,你是绝对正确的。我没有看到如何清楚地解释这一点。回答编辑。谢谢。 – 2014-10-02 13:31:50