2013-02-08 74 views
2

有没有办法通过索引/位置在表中获取某一行,而不是通过其ID?如何通过索引获取SQLite中的行(不是通过id)

比如我有3行与标识:

Record1 
Record2 
Record3 

现在,如果我使用它的ID删除第二行,剩余的行会是这样:

Record1 
Record3 

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

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

+0

就像我知道的那样,没有。顺便说一下,“索引”究竟是什么?数据库应该以什么顺序显示列表中的数据? – Dan 2013-02-08 22:46:11

+0

什么是替代呢? – pedja 2013-02-08 22:47:30

+0

使用ID列。 – Dan 2013-02-08 22:48:08

回答

6

更好的方法是从ListView项目代表的对象中获取记录的ID,然后使用它来获取数据库中的正确记录。在您的ListViewOnItemClickListener中,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相同的方式排序。

+0

它的工作,第二个,LIMIT和OFFSET。谢谢。没有尝试其他的。 – pedja 2013-02-08 23:10:33

+0

很高兴帮助,但我会*强烈*鼓励你回去并以另一种方式工作。 – Blumer 2013-02-08 23:11:30