Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何通过索引(而不是id)获取SQLite中的行_Android_Android Listview_Android Sqlite - Fatal编程技术网

Android 如何通过索引(而不是id)获取SQLite中的行

Android 如何通过索引(而不是id)获取SQLite中的行,android,android-listview,android-sqlite,Android,Android Listview,Android Sqlite,有没有一种方法可以通过行在表中的索引/位置而不是id来获取行 例如,我有3行ID为: Record1 Record2 Record3 现在,如果我使用第二行的id删除第二行,其余的行将如下所示: Record1 Record3 因为我使用ListView position来确定要删除数据库中的哪一行,所以下次尝试删除第二行时,我将得到异常,因为id为2的行不存在 有没有一种方法可以通过表中的索引检索行?更好的方法是从ListView项表示的对象中获取记录的id,然后使用该id在数据库中获取正

有没有一种方法可以通过行在表中的索引/位置而不是id来获取行

例如,我有3行ID为:

Record1
Record2
Record3
现在,如果我使用第二行的id删除第二行,其余的行将如下所示:

Record1
Record3

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


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

更好的方法是从ListView项表示的对象中获取记录的id,然后使用该id在数据库中获取正确的记录。在ListView的OnItemClickListener中,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是您要查找的索引。这还假设您的结果的排序方式与在ListView中的排序方式相同。

SQLite3自Android操作系统推出以来得到了极大的改进。用我自己的话来说:

SQLite表中的所有行都有一个64位带符号整数键,该键唯一标识其表中的行。这个整数通常称为rowid。可以使用一个特殊的独立于大小写的名称来访问rowid值:rowid、oid或_rowid_,以代替列名。在早期的Android SQLite实现中,您必须使用_id来访问索引

所以今天你可以做:

从tt LIMIT 1偏移量2中选择rowid,*; 从tt中选择rowid,*其中rowid=2; 从tt中选择rowid,*其中rowid=从tt中选择MAXrowid;-获取最后一行索引的步骤
据我所知,没有。顺便问一下,指数是多少?数据库knwo应该如何以什么顺序显示列表中的数据?那么有什么替代方法?但是如何显示呢?除了使用列表中的位置来确定要删除的行之外,还有什么其他方法?您应该在ListView中使用游标适配器。因为我正在使用ListView位置来确定要删除数据库中的哪一行,所以下次尝试删除第二行时,我将出现异常,因为id为2的行不存在。只需使用数据库的主键(而不是位置)删除相应的行,第二行就可以使用LIMIT和OFFSET。谢谢没有尝试其他方法。很高兴它有帮助,但我强烈鼓励你回去用另一种方法。
SELECT * FROM TableName LIMIT 1 OFFSET n;