关闭

Android中的Cursor到底是什么?如何理解Cursor的方法都在做什么事情?

标签: CursorquerySQLiteandroidmoveToFirst
3296人阅读 评论(4) 收藏 举报
分类:

一:Cursor到底是什么?

网上很多博客都介绍了Cursor,介绍了各种概念,各种原理。可是有的小伙伴可能还是很懵逼,这特码的到底都是什么。

刚开始接触Cursor的时候也是一脸懵逼,看到人家说这个方法是在干什么干什么,可以脑子里没有一个生动形象的动作过程就感觉理解不了。Cursor是什么呢?是游标,可能有的小伙伴不知道什么是游标,看下图。


OK了吧,是不是OK了,光标是什么意思还用解释吗,我们在输入信息的时候能看到的那个一闪一闪的短线,那不就是光标吗,所以呢,我们也可以把游标理解成这个一闪一闪的短线。


二:我们是怎么获得Cursor对象的呢?


一般情况下:

SQLiteDataBase db;

Cursor cursor = db.query(各种参数);

这时,就出现了网上的解释了,说cursor是每行的集合。

每行的集合....

每行的集合....

每行的集合....

其实开始看到这几个字的时候我是认为我理解的,可是继续一寻思,可能就会有这种疑惑,它是把一行中的所有内容装到集合中呢,还是把所有行装到一个集合中啊,而且这个行是什么啊等等一系列小白问题。

现在先解释一下SQLite数据库中是怎么存放数据的,是以表的形式存放的,看这个表Student。




这里的id,name,age,gender,school,city就是列名,name这一列下面就对应着一个对象的name属性。所以我们能看到,一行的意思就是我们存放的一个对象了,比如张三这一行,名字是张三,在年龄这一列上是5,那么这个name属性为张三的对象,它的age的属性就为5。

所以这个每行的集合的意思,是获得的满足条件(就是我们query方法中传入的条件参数)的所有行。

比如我要在这个表中找gender为男的,那么获得到的cursor就包含了张三行,赵六行,孙七行。


三:我在遍历cursor内容的时候,为什么要先moveToFirst()?


我们采用反证法,我们不进行moveToFirst()操作,我们获取游标对象后,直接输出它当前的position值




可以看到,直接输出的position的值是-1,也就相当于我们刚开始获得它的时候,它是在第0行上面闪动呢。


所以我们使用moveToFirst后在输出position就会发现position=0了,使用moveToNext也可以。


四:moveToNext如何得知是否已经遍历完毕呢?


我们翻看源码,会发现moveToFirst,moveToNext,moveToLast,moveToPrevious等最后都会执行到这个方法


图中说的:这个对象在初始化的时候,指的就是当前页面的那个对象。mPos=-1被写在一个空参构造方法里了。

看源码的时候也能发现:

moveToFirst调用的是moveToPosition(0)

moveToNext调用的是moveToPosition(mPos+1)

所以如果是第一次调用的话,这两句话的意思是一样的(开始mPos=-1)。




10
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Android中的Cursor

Android 使用的数据库是SQLite数据库,对于数据库记录的操作,可以使用Cursor(游标)来进行。 1. 关于 Cursor 在你理解和使用 Android Cursor 的时候...
  • liranke
  • liranke
  • 2011-11-01 18:47
  • 25877

Android Cursor浅析

Android Cursor分析
  • Sailingthink
  • Sailingthink
  • 2014-06-05 12:58
  • 2722

Android Cursor用法

Cursor作用类似于java中resultSet,把查询到的结果集封装在一个Cursor对象当中。cursor就像是结果集上的一个游标,可以向前向后移动。 常用方法: close() 关闭游标,释...
  • hejiero
  • hejiero
  • 2014-02-08 20:38
  • 3719

Cursor 用法

使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合相当于dataReader。今天特地将它单独拿出来谈,...
  • SpRcorder
  • SpRcorder
  • 2016-08-23 15:06
  • 570

Android 中查询数据库时Cursor类的使用

在做一个
  • jing110fei
  • jing110fei
  • 2014-08-11 13:27
  • 6184

cursor遍历方法

最近在做有关contentProvider的东西,发现网上的代码对cursor进行遍历,大多是这样的: if (cursor!=null) { while (cu...
  • xingchenxuanfeng
  • xingchenxuanfeng
  • 2015-12-22 12:31
  • 2099

Android Cursor自动更新的实现和原理

Android Cursor自动更新的实现和原理 在Android日常开发中,时常会请求数据到Cursor,然后再通过Cursor获取数据。像SQLiteDatabase和ContentProv...
  • DQ1005
  • DQ1005
  • 2016-05-04 19:15
  • 2237

android中的Cursor类

使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合相当于dataReader。今天特地将它单独拿出来谈,...
  • wykwdy007
  • wykwdy007
  • 2012-08-13 19:31
  • 5008

Android 数据存储——数据查询query方法参数解析

参考链接:http://notfatboy.iteye.com/blog/653357 首先假设有如下表格,表格名称为:"Employees" SQL基本格式如下: select 列名称 from...
  • Thanksgining
  • Thanksgining
  • 2015-02-05 10:35
  • 5000

Android 数据查询query函数参数解析

转自:http://notfatboy.iteye.com/blog/653357首先我们假设我们有如下表格,表格名称“Employees”: IdLastNameFirstNameAddressCi...
  • scorplopan
  • scorplopan
  • 2011-04-05 22:15
  • 70086
    个人资料
    • 访问:12175次
    • 积分:384
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:0篇
    • 译文:0篇
    • 评论:18条
    最新评论