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)的相同和不同之处。

### 回答1: Cursor类是Python中数据库API的一部分,用于在数据库连接中执行查询操作并管理结果集。它提供了一种从结果集中检索行和列数据的方法,并提供了一些用于浏览和修改结果集的方法。 在使用Cursor对象之前,必须先建立一个数据库连接。一旦建立了连接,可以使用Cursor()方法创建一个游标对象,然后可以使用该游标对象执行查询操作和管理结果集。 一些常用的Cursor类方法包括: - execute():执行SQL查询,可以传递参数,返回值为受影响的行数; - executemany():执行多个参数相同的SQL查询,返回值为受影响的行数; - fetchone():获取结果集中的下一行数据,返回值为一行数据的元组; - fetchall():获取结果集中的所有行数据,返回值为多个元组组成的列表; - fetchmany():获取结果集中的指定数量的行数据,返回值为多个元组组成的列表。 此外,Cursor类还提供了一些用于管理结果集的方法,例如scroll()、rowcount()、fetchwarnings()等。 总之,Cursor类是Python数据库API中一个非常重要的类,它提供了一种从数据库中检索数据的方法,并且可以通过一些方法来管理和修改结果集。 ### 回答2: Cursor(光标)类是用于在数据库查询中遍历结果集的Java类。在Java中,我们使用Cursor类来执行SQL查询并从结果集中检索数据。以下是Cursor类的一些重要信息和功能: 1. 创建Cursor对象:我们可以使用数据库的query()或rawQuery()方法来执行SQL查询,并将结果存储在Cursor对象中。例如:Cursor cursor = database.rawQuery("SELECT * FROM table", null); 2. 遍历结果集:Cursor对象允许我们按顺序逐个遍历结果集中的记录。我们可以使用moveToFirst()方法将光标移到结果集的第一行,然后使用moveToNext()方法逐个移动到下一行。我们还可以使用moveToPrevious()和moveToLast()方法在结果集中移动。 3. 获取列索引:我们可以使用getColumnIndex()方法来获取指定列名的索引。例如,如果我们要获取"name"列的索引,我们可以使用int index = cursor.getColumnIndex("name"); 4. 检索数据:我们可以使用Cursor类中的各种get方法来检索数据。根据具体的列类型,我们可以使用getInt()、getLong()、getFloat()、getDouble()等方法来获取整数、长整数、浮点数、双精度数等类型的数据。我们还可以使用getString()方法来获取字符串类型的数据。 5. 关闭Cursor:在使用完Cursor对象后,我们应该及时关闭它以释放资源。我们可以使用close()方法来关闭Cursor对象。例如,cursor.close(); 总体而言,Cursor类是一个非常有用的工具,可以帮助我们在数据库查询中获取和处理数据。它提供了各种方法和功能,使得我们可以方便地遍历结果集并获取所需的数据。但是,在使用Cursor对象时,我们需要小心处理空指针异常和内存泄漏问题,以确保代码的稳定性和性能。 ### 回答3: Cursor类是Java编程语言中的一个类,用于处理数据库查询结果的游标(cursor)对象。它提供了一种机制,使得我们可以从查询结果集中逐行访问数据。具体来说,Cursor类提供了以下几个重要的方法和属性: 1. moveToFirst():将游标移动到结果集的第一行。 2. moveToNext():将游标移动到结果集的下一行。 3. moveToPrevious():将游标移动到结果集的上一行。 4. moveToLast():将游标移动到结果集的最后一行。 5. isAfterLast():判断游标是否指向结果集的最后一行之后。 6. isBeforeFirst():判断游标是否指向结果集的第一行之前。 7. getCount():获取结果集中的总行数。 8. getColumnIndex(String columnName):根据列名获取该列在结果集中的索引。 9. getColumnName(int columnIndex):根据列索引获取该列的名称。 10. getString(int columnIndex):根据列索引获取字符串类型的列值。 11. getInt(int columnIndex):根据列索引获取整数类型的列值。 12. getLong(int columnIndex):根据列索引获取长整数类型的列值。 13. getFloat(int columnIndex):根据列索引获取单精度浮点数类型的列值。 14. getDouble(int columnIndex):根据列索引获取双精度浮点数类型的列值。 通过使用Cursor类,我们可以轻松地遍历查询结果集中的每一行,并获取每一列的值。这种逐行访问的方式非常适合处理大型的查询结果集,能够有效地减少内存占用和提高程序性能。同时,Cursor类还可以和其他类(如Adapter类)结合使用,实现数据的展示和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值