使用过 SQLite数据库的童鞋对 Cursor 应该不陌生,加深自己和大家对Android 中使用 Cursor 的理解。

      关于 Cursor

      在你理解和使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情:

      Cursor 是每行的集合。使用 moveToFirst() 定位第一行。你必须知道每一列的名称。你必须知道每一列的数据类型。Cursor 是一个随机的数据源。所有的数据都是通过下标取得。
关于 Cursor 的重要方法:

 

 1 c.move(int offset); //以当前位置为参考,移动到指定行   2 c.moveToFirst();    //移动到第一行   3 c.moveToLast();     //移动到最后一行   4 c.moveToPosition(int position); //移动到指定行   5 c.moveToPrevious(); //移动到前一行   6 c.moveToNext();     //移动到下一行   7 c.isFirst();        //是否指向第一条   8 c.isLast();     //是否指向最后一条   9 c.isBeforeFirst();  //是否指向第一条之前  10 c.isAfterLast();    //是否指向最后一条之后  11 c.isNull(int columnIndex);  //指定列是否为空(列基数为0)  12 c.isClosed();       //游标是否已关闭  13 c.getCount();       //总数据项数  14 c.getPosition();    //返回当前游标所指向的行数  15 c.getColumnIndex(String columnName);//返回某列名对应的列索引值,如果不存在返回-1  16 c.getString(int columnIndex);   //返回当前行指定列的值  17 c·getColumnIndexOrThrow(String columnName)——从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。18 c.close()——关闭游标,释放资源

 

  下面来看看一段代码: 

 1      Button query=(Button) findViewById(R.id.query_data); 2         query.setOnClickListener(new OnClickListener(){ 3  4             @Override 5             public void onClick(View v) { 6                 SQLiteDatabase db=dbHelper.getWritableDatabase(); 7                 //查询Book表中的所有的数据 8                 //Cursor cursor=db.query("Book", null, null, null, null, null, null); 9                 Cursor cursor=db.rawQuery("Select * from Book", null);10                 if(cursor.moveToFirst()){11                     do{12                         //遍历Cursor对象,取出数据并打印13                         String name=cursor.getString(cursor.getColumnIndex("name"));14                         String author=cursor.getString(cursor.getColumnIndex("author"));15                         int pages=cursor.getInt(cursor.getColumnIndex("pages"));16                         double price=cursor.getDouble(cursor.getColumnIndex("price"));17                         Log.d("MainActivity","book name is"+name);18                         Log.d("MainActivity","book author is"+author);19                         Log.d("MainActivity","book pages is"+pages);20                         Log.d("MainActivity","book price is"+price);21                     }while(cursor.moveToNext());22                 }23                 cursor.close();24             }25         });

访问 Cursor 的下标获得其中的数据

int nameColumnIndex = cur.getColumnIndex(People.NAME);
String name = cur.getString(nameColumnIndex);
现在让我们看看如何循环 Cursor 取出我们需要的数据

while(cur.moveToNext()) {
    //光标移动成功

   String email = cursor.getString(cursor.getColumnIndex(RuiXin.EMAIL));

   startManagingCursor(cursor);  //查找后关闭游标 
   //把数据取出
}


     当cur.moveToNext() 为假时将跳出循环,即 Cursor 数据循环完毕。

     如果你喜欢用 for 循环而不想用While 循环可以使用Google 提供的几下方法:

·isBeforeFirst()——返回游标是否指向之前第一行的位置
·isAfterLast()——返回游标是否指向第最后一行的位置
·isClosed()——如果返回 true 即表示该游戏标己关闭
有了以上的方法,可以如此取出数据

for(cur.moveToFirst();!cur.isAfterLast();cur.moveToNext())
{
    int nameColumn = cur.getColumnIndex(People.NAME);
    int phoneColumn = cur.getColumnIndex(People.NUMBER);
    String name = cur.getString(nameColumn);
    String phoneNumber = cur.getString(phoneColumn);
}

Tip:在Android 查询数据是通过Cursor 类来实现的。当我们使用 SQLiteDatabase.query()方法时,就会得到Cursor对象, Cursor所指向的就是每一条数据。

Cursor 位于 android.database.Cursor类,可见出它的设计是基于数据库服务产生的。

以上转自:http://blog.sina.com.cn/s/blog_618199e60101fskp.html

 

另:Activity.startManagingCursor方法:

将获得的Cursor对象交与Activity管理,这样Cursor对象的生命周期便能与当前的Activity自动同步,省去了自己对Cursor的管理。

1.这个方法使用的前提是:游标结果集里有很多的数据记录。

所以,在使用之前,先对Cursor是否为null进行判断,如果Cursor != null,再使用此方法 2.如果使用这个方法,最后也要用stopManagingCursor()来把它停止掉,以免出现错误。 3.使用这个方法的目的是把获取的Cursor对象交给Activity管理,这样Cursor的生命周期便能和Activity自动同步,省去自己手动管理。

更多相关文章

  1. Android(安卓)仿iphone提醒事项(一)
  2. android 数据备份
  3. Android(安卓)SQLite批量插入数据速度解决方案
  4. Android(安卓)数据库更新
  5. Android应用框架之数据库框架Room简介
  6. 数据共享之Android中用Application类实现全局数据变量的使用
  7. Android(安卓)RecyclerView单点、批量数据元素项目item的增加、
  8. Android(安卓)Studio--文件存储
  9. Android学习笔记:Preference的使用

随机推荐

  1. Android(安卓)JNI详述
  2. Android中的多线程
  3. 【OpenCV4Android学习一】 Android(安卓)
  4. Android 更改软键盘Enter键为搜索
  5. Android集成Huawei PUSH(四)——客户端开发
  6. android 分辨率问题
  7. Android通过JNI调用驱动程序(完全解析实
  8. Android应用程序添加自定义的property属
  9. Android(1.初识Android应用程序目录)
  10. android 出现gen already exists but is