在我的应用程序的 SQLite 表中,我需要有一列的行号为 1、2、3、4、5(或者能够获取每一行的行号)。现在我一直在删除行和添加行,所以我不能每次添加新行时都输入一个数字,因为删除行时,编号会变得混乱。那么有没有办法获取行号,或者创建一个特殊的列来作为行号?如果是这样,怎么做?
4 回答
如果您希望每次添加和删除行时都将其重置,那么这真的应该是表中的一列吗?
例如,如果您只想能够从表中选择第 20 行,您可以使用 SQL 的LIMIT
andOFFSET
子句来选择特定行,例如,从我的news
表中检索第 20 行,我可以这样做:
SELECT * FROM news LIMIT 1 OFFSET 19;
或者,如果您真的想要具有此行号信息的列,您可以添加一个新的INTEGER
列类型,然后编写一个 Objective C 方法来更新该列的值,并在您删除或插入行时调用该方法结果集。
有多种方法可以解决您的问题。您必须解释您要完成的工作,以便我们为您提供帮助。典型的AUTOINCREMENT
答案是我们通常用于表键的内容,但听起来您不希望它成为表的键,而是其他东西。
如果您使用ROWID,它是一个自动递增的数字,您可以通过选择所有数据来计算行号,按 ROWID 排序,然后使用它们在返回结果中的索引作为它们的行号。如果您正在创建一些数据模型类,则可以将其传递给它的初始化程序。
如果那不能满足您的要求,那么添加更多有关您正在尝试做的事情的详细信息怎么样。你确定你需要一个行号吗?
当您删除在行编号方案中造成“漏洞”的行时,您不想更改数据库中的所有现有记录。
SQLite 已经通过 ROWID 支持你想要的。当您进行选择查询时,只需将其指定为按 ROWID 排序,所有返回的记录都将按正确顺序排序,您可以按顺序对其进行迭代。
请参阅此页面:http ://www.sqlite.org/autoinc.html
FWIW,在某些地方你应该更喜欢直接 SQLite 而不是 Core Data。然而,这些都是极少数情况。一般来说,首先使用 Core Data,只有当 CD 不能满足您的需求时才回退到 SQLite。
只需为表使用自动增量主键。那么总会有一个唯一的标识符,您可以访问一条记录。