Android查询游标

时间:2012-04-24 15:37:49

标签: java android sqlite cursor

我的光标有问题。我创建了一个警报管理器,它可以选择一个值来与循环中的另一个进行比较。

我的问题是这样的:如果光标在循环之外,那么只选择我的first值(如果exsist只有一个值明显选择这个)....如果光标在循环中,这个只选择last值(如果只有一个值,则只选择这个值)。

如何解决这个问题?

我的疑问:

public Cursor getRegistry2()
    {
        return (getReadableDatabase().query(
            TabRegistry.TABLE_NAME, 
            TabRegistry.COLUMNS, 
            TabRegistry._ID, 
            null,
            null, 
            null, 
            null));

我的光标在服务中:

 Cursor c5 = databaseHelper.getRegistry2();
                     c5.moveToFirst();
                        while(c5.isAfterLast() == false){   
                            tipe = c5.getString(c5.getColumnIndex(TabRegistry.TYPE)); 

                            status = c5.getString(c5.getColumnIndex(TabRegistry.STATUS)); 
                            number = c5.getString(c5.getColumnIndex(TabRegistry.NUMBER)); 
                        c5.moveToNext();
                        }
                       c5.close(); 

提前感谢!

3 个答案:

答案 0 :(得分:2)

正如我在评论中提到的,如果你真的想找到一个特定的项目,你需要实际寻找它。

假设您要比较状态,可以这样做:

while(c5.isAfterLast() == false){   
    tipe = c5.getString(c5.getColumnIndex(TabRegistry.TYPE)); 
    status = c5.getString(c5.getColumnIndex(TabRegistry.STATUS)); 
    number = c5.getString(c5.getColumnIndex(TabRegistry.NUMBER)); 
    if (status.equals(comparisonString)){
        break;
    }
    c5.moveToNext();
}

这会突破你的循环,为你正在寻找的项目设置值。

就个人而言,这是一个很大的计算开销,我只是让查询直接查找比较值,然后检查并查看返回的游标是否为空。更简单。

答案 1 :(得分:0)

我不明白你的问题,但对我来说很奇怪的是:while(c5.isAfterLast() == false){

您是否尝试过while (c5.moveToNext()) {并删除c5.moveToFirst();

答案 2 :(得分:0)

您应该知道,如果您的光标值超过一个,则覆盖tipestatusnumber的值。

Cursor c5 = databaseHelper.getRegistry2();
if(c5.moveToFirst()){
 do{   
    tipe = c5.getString(c5.getColumnIndex(TabRegistry.TYPE)); 

    status = c5.getString(c5.getColumnIndex(TabRegistry.STATUS)); 
    number = c5.getString(c5.getColumnIndex(TabRegistry.NUMBER));
 }while(c5.moveToNext());
}
c5.close();