Cursor如何在android中运行

时间:2015-03-04 22:48:38

标签: java android cursor

我很难在我的程序中完全可视化'Cursor'功能。我有点得到它的想法,但任何人都可以详细解释它的功能吗?

By Cursor,我指的是Cursor接口。 我不能简单地理解它与任何事物所扮演的角色。

http://developer.android.com/reference/android/database/Cursor.html

3 个答案:

答案 0 :(得分:7)

从SQLite数据库上的查询返回Cursor对象。 它将返回查询返回的所有行。

假设您在数据库数据库中有一个名为names的表,其配置如下:

_id     _name
1       Space Ghost
2       Zorak
3       Moltar
4       Brak

如果您想从此表中获取所有数据并使用它,您可以这样做 像这样的东西:

public HashMap<Integer, String> getNames(){

 HashMap<Integer, String> data = new HashMap<Integer, String>();

 try{
  SQLiteOpenHelper helper = new MyOpenDbHelper(context);
  SQLiteDatabase db = helper.getReadableDatabase();
  String selectQuery = "SELECT  * FROM names";
  Cursor cursor = db.rawQuery(selectQuery, null);
  if (cursor != null && cursor.moveToFirst()){ //make sure you got results, and move to first row
    do{
        int mID = cursor.getInt(0); //column 0 for the current row
        String mName = cursor.getString(1); //column 1 for the current row
        data.put(mID, mName);

      } while (cursor.moveToNext()); //move to next row in the query result

  }

 } catch (Exception ex) {
    Log.e("MyApp", ex.getMessage());
 } finally
 {
    if (cursor != null) {
       cursor.close();

    }
    if (db != null) {
        db.close();
    }

 }

return data;
}

通常你会创建自己的类来扩展SQLiteOpenHelper,因为:

public class MyOpenDbHelper extends SQLiteOpenHelper {
     //........
}

答案 1 :(得分:2)

来自Wikipedia

  

在计算机科学中,数据库游标是一种控制结构,可以遍历数据库中的记录。游标有助于后续处理以及遍历,例如检索,添加和删除数据库记录。遍历的数据库游标特性使游标类似于迭代器的编程语言概念。

来自Here

  

游标是一种允许您迭代集合中记录的工具。它有订单和当前记录的概念。

来自The documentation you pointed yourself

  

提供对数据库查询返回的结果集的随机读写访问。

因此,不要将Cursor视为一种功能,而应将其视为从任何数据库以更有效的方式获取记录的手段。

答案 2 :(得分:1)

您是指这个Cursor用法吗?

public String databaseToString(){
    String dbString = "";
    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_PRODUCTS + " WHERE 1";

    //Cursor points to a location in your results
    Cursor c = db.rawQuery(query, null);
    //Move to the first row in your results
    c.moveToFirst();