Cursor 介绍

简介:
这个接口提供随机读写访问一个数据库查询返回的结果集
游标实现不需要从多个线程同步所以代码,使用游标使用光标时应该执行自己的同步。

方法:
void close();
关闭游标,释放所有的资源,使其完全无效。
void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)
文本检索请求的列,并将其存储在缓冲区。
void deactivate ()
这种方法在API 16时弃用。会让光标都失活,使所有调用失败,直到重新查询()。
int getColumnCount ()
返回列的总数
int getColumnIndex (String columnName)
返回从0开始的给定的列的索引名称,如果列不存在返回-1。
int getColumnIndexOrThrow (String columnName)
返回从0开始的给定的列名称的索引名称,如果列不存在则抛出 IllegalArgumentException异常。
String getColumnName (int columnIndex)
更具索引返回列的名字。
String[] getColumnNames ()
返回按顺序排列的列的名字数组。
int getCount ()
返回游标的列的数量。
int getPosition ()
返回游标当前在行中的位置
int getType (int columnIndex)
返回给定列的索引,返回类型
boolean getWantsAllOnMoveCalls ()
boolean isAfterLast ()
返回游标是否在最后一行后面位置
boolean isBeforeFirst ()
返回游标是否在第一行前面位置
boolean isClosed ()
返回游标是否关闭
boolean isFirst ()
返回游标是否指向第一行
boolean isLast ()
返回游标是否指向最后一行
boolean isNull (int columnIndex)
返回指定列是否为空
boolean move (int offset)
将游标移到一个特定位置,相对于当前位置,前进或者后退一定的位置。正数代表向前移动,负数代表向后移动。当然如果这个值超出了表的范围,那么移动的范围也就是这个表的两边,即表示为第一个的前一个和最后一个的后一个(PS:通过英语,我是这么理解的)。
返回值代表是否移动成功。
boolean moveToFirst ()
游标移动到第一行
boolean moveToLast ()
游标移动到最后一行
boolean moveToNext ()
游标移动到下一行
boolean moveToPosition (int position)
将游标移动到一个绝对位置,当然有效范围是:-1 <= position <= count。
返回值代表移动的结果。
boolean moveToPrevious ()
将游标移动到上一行
void registerContentObserver (ContentObserver observer)
注册一个观察者,当数据表数据变化时刷新游标数据
void registerDataSetObserver (DataSetObserver observer)
注册一个观察者,当游标中的数据集发生变化时被调用。
boolean requery ()
此方法在API 11时已被弃用。
void unregisterContentObserver (ContentObserver observer)
移除注册观察者
void unregisterDataSetObserver (DataSetObserver observer)
移除注册观察者

下面简单说说Cursor的使用,比如查询一个班级学生表,并显示,查询出的学生肯定不止一个,Cursor中应该有一个数据集,每一行都是一个学生对象。如下图所示:
这里写图片描述
需要循环从头到尾遍历,或者直接移动光标位置,根据类型获取相对的数据。
while(cursor.moveToNext()){
int age = cursor.getInt(cursor.getColumnIndexOrThrow(“age”));
String name = cursor.getSring(cursor.getColumnIndexOrThrow(“name”));
boolean sex = Boolean.parseBoolean(cursor.getSring(cursor.getColumnIndexOrThrow(“sex”)));
float height = cursor.getFloat(cursor.getColumnIndexOrThrow(“height”));
}
差不多就是这样,简单的取Cursor中的数据,官方没有提供boolean类型的存取方法,所以要么就是用int 0或1,要么就是字符串存储然后再转型。

这都是简单使用,明白就好,之后研究下registerContentObserver (ContentObserver observer)和 registerDataSetObserver (DataSetObserver observer)的相同和不同之处。

猜你喜欢

转载自blog.csdn.net/hello_12413/article/details/50331689