如何从android中的游标中检索数据?

时间:2011-06-18 12:06:59

标签: java android database sqlite cursor

我从我的数据库中检索信息,它全部在Cursor中。现在我需要浏览光标中的每个项目以检索lng lats和要在地图上显示的名称。

Cursor c = mDbHelper.fetchSpot(15);
        startManagingCursor(c);

        double lat = Double.parseDouble(c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_LAT)));
        double lng = Double.parseDouble(c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_LNG)));
        String name = c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_ADDRESS));

我有一个名为fecthAllSpots()的antoher方法,它返回游标中的许多项目,如何从该游标中的每一行检索每个lng lat和name?

2 个答案:

答案 0 :(得分:9)

您可以使用while循环迭代光标返回的所有行。

while(c.moveToNext()){
    double lat = Double.parseDouble(c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_LAT)));
    double lng = Double.parseDouble(c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_LNG)));
    String name = c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_ADDRESS));
}

当然你必须对lat,lng和name变量做一些事情,因为它们会在每次迭代时被覆盖。我建议你实现一个DBLocation类,它可以存储一个位置的名称,经度和纬度。然后,您可以将从光标创建的所有对象存储在数组或列表中。

答案 1 :(得分:6)

首先。你可以在游标上使用getInt,getLong等方法来检索值而不是之后解析它们。

问题:

这是sintax:

首先查询db以获取游标。

接下来对游标进行空检查(以防万一因为它有时会发生),也可以使用try catch块。

接下来写:

    if(c.moveToFirst()){
do{
// YOUR CODE FOR EACH CURSOR ITEM HERE.
// the cursor moves one field at a time trhough it's whole dataset
}while(c.moveToNext())
}

最后关闭光标或者如果它是托管查询,则不执行任何活动将为您关闭它。在一个块中重新记住所有这一切,除了你要检查的其他内容之外,还要考虑游标的nullPointerException。