3

有没有办法通过它在表中的索引/位置而不是它的 id 来获取一行?

例如,我有 3 行带有 ID:

Record1
Record2
Record3

现在,如果我使用它的 id 删除第二行,剩下的行将是这样的:

Record1
Record3

因为我使用ListView位置来确定要删除数据库中的哪一行,所以下次我尝试删除第二行时,我会得到异常,因为 id 为 2 的行不存在。

那么有没有一种方法可以通过表中的索引来检索行?

4

2 回答 2

10

更好的方法是从ListViewitem 表示的对象中获取记录的 id,然后使用它在数据库中获取正确的记录。在您ListView的 'sOnItemClickListener中,该onItemClick事件将AdapterView作为第一个参数,将所选项目的索引作为第二个参数。从适配器获取该项目并将其转换为它所代表的类型。

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    YourClass c = (YourClass)arg0.getItemAtPosition(arg2);
    //index of the record to delete can now be accessed at c.id
}

但是,如果你真的想获得第n条记录,我相信你可以做到以下几点:

SELECT * FROM TableName LIMIT 1 OFFSET n;

其中 n 是您所追求的索引。这还假设您的结果的排序方式与它们在您的ListView.

于 2013-02-08T22:54:36.787 回答
1

SQLite3自引入 Android 操作系统以来得到了极大的改进。从官方文档(用我自己的话来说):

All rows within SQLite tables have a 64-bit signed integer key that uniquely identifies the row within its table. This integer is usually called the "rowid". The rowid value can be accessed using one of the special case-independent names: rowid, oid, or _rowid_, in place of a column name. (In the early Android SQLite implementations you had to use _id to access the index.)

So today you can do:

    SELECT rowid,* FROM tt LIMIT 1 OFFSET 2;
    SELECT rowid,* FROM tt WHERE rowid=2;
    SELECT rowid,* FROM tt WHERE rowid=(SELECT MAX(rowid) FROM tt); -- to get last row index
于 2020-09-24T14:54:35.120 回答