2013-12-10 40 views
0

我在我的一个iOS应用程序中使用SQLITE。从Sqlite在IOS中获取RowID

我需要获取所有记录的rowID。例如: - 我的桌子里有6排。 如果我删除第4行比ID_Column(由我维护)有序列。 1,2,3,5,6 但我想要的是1,2,3,4,5。

那么有什么办法来获取所选行的rowid?

例如: - Select rowid from TableName where projectName='ABC'

我们能做到这一点?

我有搜索和发现,我们可以这样做: -

NSInteger lastInsertedID = sqlite3_last_insert_rowid(database); 

NSInteger rowsUpdated = sqlite3_total_changes(database); 

有没有什么办法让选定行的行ID?

+0

你认为你需要连续的rowids用于什么?当你调用sqlite3_step时,你不能计算记录吗? –

+0

根据数据库的大小以及它是否位于客户端或服务器上,通常会有一列用于切换行是否可访问。例如,你可以放一个'isDeleted'字段。原因是即使数据从用户的角度被“删除”,也许其他数据仍然需要它。此外,就像CL问到的那样,通过让ID_Column始终处于有序状态,您计划获得什么好处? – Chris

回答

1

你可以不喜欢它:

SELECT (SELECT COUNT(*) FROM TableName AS tempTable2 WHERE tempTable2.ID_Column >= tempTable1. ID_Column) AS Row_Number, id, name FROM TableName tempTable1 ORDER BY Row_Number ASC 

在这里,您创建与现有的表,其中包含一个名为Row_Number一个额外的字段的临时表。

0

我不知道你为什么需要rowid(你可以简单地计算记录),但你可以使用VACUUM来重建数据库。 This article也可能是有用的,并提供额外的信息,为什么你应该小心,当依靠rowids。