Android SQLite使用ROWID的别名创建表

Android SQLite使用ROWID的别名创建表,android,sqlite,Android,Sqlite,现在,我正在尝试解决如何实际创建一个表,其中的列只是ROWID的别名。我想这样做,因为一些android类需要一个名为“\u id”的唯一列,但我不希望该列成为主键。我不能在不是PK的列上使用自动增量,所以我只希望_id是一个别名。我知道我可以在查询中这样做,但这对我的情况并不实际。有什么建议吗?这可能吗 谢谢:) 编辑:真的,我只想有我自己的PK,但也有一个id字段,以便游标适配器正常工作等 编辑:如果我的PK也是一个数字类型,查看它会建议在查询中这样做,但是如果我的PK使用的是一个文本列呢?

现在,我正在尝试解决如何实际创建一个表,其中的列只是ROWID的别名。我想这样做,因为一些android类需要一个名为“\u id”的唯一列,但我不希望该列成为主键。我不能在不是PK的列上使用自动增量,所以我只希望_id是一个别名。我知道我可以在查询中这样做,但这对我的情况并不实际。有什么建议吗?这可能吗

谢谢:)

编辑:真的,我只想有我自己的PK,但也有一个id字段,以便游标适配器正常工作等


编辑:如果我的PK也是一个数字类型,查看它会建议在查询中这样做,但是如果我的PK使用的是一个文本列呢?(这里有点自言自语)-我想我可以复制并只获取字符串,而不是对_idcol使用long(另外,将col的名称作为PK传入游标适配器,去掉_id!),或者只在SELECT中为ROWID添加一个别名作为_id,尽管感觉有点粗糙…

TBH,我认为这是不可行的。你需要有这样的PK列(即使有很多黑客攻击,你也可以创建一些解决方法)

我更倾向于建议将_id列作为技术主键,并将附加列作为逻辑主键,即仅使用具有唯一约束的自由定义列。然后,您的程序逻辑应该能够简单地将逻辑PK用于所有操作。当然,这需要您对查找操作等使用自定义查询,但这通常更合适


hth..

您可能有一个完全独立于SQLite内置的主键

每个SQLite表的每一行都有一个64位带符号整数键,该键唯一地标识其表中的行。这个整数通常称为“rowid”。可以使用一个独立于特殊情况的名称“rowid”、“oid”或“rowid”来代替列名来访问rowid值

您可以通过在结果前加上隐藏的rowid列,对查询进行公式化,以便调用内置的rowid
\u id
,以利于
游标适配器

select _rowid_ as _id, ...

rowid是唯一的,但不必是主键。您可以在CREATETABLE语句中任意设置主键。

+1谢谢您的回答。我知道这是一个可能的解决方案,但想看看是否还有其他解决方案。希望他们刚刚这么做了,这样您就可以将PK col名称传递给适配器,它将传递出值,而不是有时很尴尬的id值