有没有办法通过表中的索引/位置获取行,而不是通过其id?
例如,我有3行ID:
Record1
Record2
Record3
现在,如果我使用其id删除第二行,其余行将如下所示:
Record1
Record3
因为我使用ListView
位置来确定要删除的数据库中的哪一行,所以下次我尝试删除第二行时,我会得到异常,因为id为2的行不存在。
那么有一种方法可以通过表中的索引检索行吗?
答案 0 :(得分:6)
更好的路径是从ListView
项表示的对象中获取记录的id,然后使用它来获取数据库中的正确记录。在ListView
的{{1}}中,OnItemClickListener
事件将onItemClick
作为第一个参数,将所选项目的索引作为第二个参数。从适配器获取该项目并将其转换为它所代表的类型。
AdapterView
但是,如果您真的想获得第n 条记录,我相信您可以执行以下操作:
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;
中的结果相同。
答案 1 :(得分:1)
SQLite3 有了很大的改进。从official documentation(用我自己的话说):
SQLite表中的所有行都有一个64位带符号整数键,可唯一标识其表中的行。该整数通常称为“ rowid” 。可以使用不区分大小写的特殊名称之一来访问rowid值:
rowid
,oid
或_rowid_
代替列名。 (在早期的Android SQLite实现中,您必须使用_id
来访问索引。)
所以今天您可以这样做:
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