SQLite CREATE表,带有ROWID的别名

时间:2012-07-06 15:22:17

标签: android sqlite

查看this answer我试图找出如何实际创建一个列,该列只是ROWID的别名。我想这样做,因为一些android类需要一个名为'_id'的唯一列,但我不希望col成为主键。我不能在不是PK的col上使用AUTO_INCREMENT,所以我只想将_id作为别名。我知道我可以在查询中这样做,但这对我的情况不切实际。有什么指针吗?这甚至可能吗?

谢谢:)

编辑:我真的只想拥有自己的PK,但也有一个id字段让CursorAdapters正常工作等等

编辑:看Do i have to use _ID as a SQlite primary key? and does it have to be an INT? (Android Dev)如果我的PK也是数字类型,它建议在查询中执行它,但是如果它是我用于PK的TEXT col怎么办? (在这里大声思考) - 我想我可以复制CursorAdaptor而只是getString而不是_id col的long(加上,传递col的名称作为PK用于游标适配器,摆脱_id!)或者只是在SELECT中添加ROWID的别名为_id,虽然感觉有点hacky ......

2 个答案:

答案 0 :(得分:2)

您的主键可能完全独立于SQLite的内置rowid

  

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

您可以通过将隐藏的rowid列添加到结果中来制定查询,以便为_id的好处调用内置rowid CursorAdaptor

select _rowid_ as _id, ...

rowid是唯一的,但不一定是主键。您可以在CREATE TABLE语句中创建主键。

答案 1 :(得分:0)

TBH,我认为这不可行。您需要拥有这种PK列(即使有很多黑客攻击,您可以创建某种解决方法)。

我宁愿建议将_id列作为技术PK,并将另一列作为逻辑PK,即只是一个具有唯一约束的自由定义列。然后,您的程序逻辑应该能够简单地将逻辑PK用于所有操作。当然,这需要您使用自定义查询进行查找操作等,但这通常更合适。

HTH ..