查看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 ......
答案 0 :(得分:2)
您的主键可能完全独立于SQLite的内置rowid。
每个SQLite表的每一行都有一个64位有符号整数键,用于唯一标识其表中的行。这个整数通常称为“rowid”。可以使用一个与特殊情况无关的名称“rowid”,“oid”或“ rowid ”代替列名来访问rowid值。
您可以通过将隐藏的rowid列添加到结果中来制定查询,以便为_id
的好处调用内置rowid CursorAdaptor
:
select _rowid_ as _id, ...
rowid是唯一的,但不一定是主键。您可以在CREATE TABLE语句中创建主键。
答案 1 :(得分:0)
我宁愿建议将_id列作为技术PK,并将另一列作为逻辑PK,即只是一个具有唯一约束的自由定义列。然后,您的程序逻辑应该能够简单地将逻辑PK用于所有操作。当然,这需要您使用自定义查询进行查找操作等,但这通常更合适。
HTH ..