使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合。今天特地将它单独拿出来谈,加深自己和大家对Android 中使用 Cursor 的理解。
关于 Cursor
在你理解和使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情:
Cursor 是每行的集合。
使用 moveToFirst() 定位第一行。
你必须知道每一列的名称。
你必须知道每一列的数据类型。
Cursor 是一个随机的数据源。
所有的数据都是通过下标取得。
关于 Cursor 的重要方法:
close()
关闭游标,释放资源
copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)
在缓冲区中检索请求的列的文本,将将其存储
getColumnCount()
返回所有列的总数
getColumnIndex(String columnName)
返回指定列的名称,如果不存在返回-1
getColumnIndexOrThrow(String columnName)
从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。
getColumnName(int columnIndex)
从给定的索引返回列名
getColumnNames()
返回一个字符串数组的列名
getCount()
返回Cursor 中的行数
moveToFirst()
移动光标到第一行
moveToLast()
移动光标到最后一行
moveToNext()
移动光标到下一行
moveToPosition(int position)
移动光标到一个绝对的位置
moveToPrevious()
移动光标到上一行
下面来看看一小段代码:
if (cur.moveToFirst() == false)
{
//为空的Cursor
return;
}
访问 Cursor 的下标获得其中的数据
int nameColumnIndex = cur.getColumnIndex(People.NAME);
String name = cur.getString(nameColumnIndex);
现在让我们看看如何循环 Cursor 取出我们需要的数据
while(cur.moveToNext())
{
//光标移动成功
〖黑软手机资讯频道〗
//把数据取出
}
当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所指向的就是每一条数据。结合ADO.net 的知识可能好理解一点。
Cursor 位于 android.database.Cursor类,可见出它的设计是基于数据库服务产生的。
另外,还有几个己知的子类,分别为:
AbstractCursor
AbstractWindowedCursor
CrossProcessCursor
CursorWrapper
MatrixCursor
MergeCursor
MockCursor
SQLiteCursor
本篇文章来源于 黑软基地-中国最大的黑客软件安全教程下载站! 原文链接:http://www.hackvip.com/mobiwen/html/Mobile_221615.html
分享到:
相关推荐
### Android Cursor 的用法 #### 一、简介 在 Android 开发中,Cursor 是一个非常重要的类,主要用于处理数据查询结果。它提供了一个简洁的方法来访问数据库查询的结果集,并允许开发者方便地遍历这些结果。对于...
以下是对Android检测Cursor泄漏的原理、使用方法以及常见问题的详细解释。 **Cursor泄漏原理** Cursor泄漏通常发生在以下情况: 1. 当Cursor创建后,没有在使用完毕后调用`close()`方法释放资源。 2. 在异步任务或...
在Android开发中,`Cursor` 是一个非常重要的概念,它用于从SQLite数据库中检索数据。`Cursor` 类就像一个指针,可以遍历查询结果中的每一行数据。本篇文章将详细介绍如何使用`Cursor`以及在实际代码中的应用。 ...
使用`Activity`的`managedQuery()`方法可以方便地管理Cursor的生命周期,因为它会在`Activity`暂停或销毁时自动关闭Cursor。但这种方法有一个限制,即它不支持动态更换Cursor,如果查询条件改变,我们需要重新查询并...
以下是关于Android中SQLite的详细使用方法: 1. 创建SQLite数据库 - 首先,创建一个继承自`SQLiteOpenHelper`的类。这个类有两个关键的方法:`onCreate()`和`onUpgrade()`。`onCreate()`方法在数据库首次创建时被...
- 忘记关闭Cursor:开发者可能在使用完Cursor后忘记调用`close()`方法。 - 异步任务中的Cursor:在异步任务或线程中使用Cursor,如果任务未结束或线程未停止,Cursor将无法正常关闭。 - CursorAdapter与ListView...
尤其是在Android 4.4(KitKat)及更高版本,由于系统API的变化,开发者需要采用新的方法来处理这一任务。以下是一个详细解释如何在Android 4.4之后获取相册图片和路径的实现方法。 首先,我们需要了解在不同版本的...
本文将详细讲解在使用SQLite数据库查询时,`query()`方法中的`selectionArgs`参数的用法。 首先,`query()`方法是Android中进行数据库查询的主要接口,它来自`android.database.sqlite.SQLiteDatabase`类。该方法...
总结来说,理解并优化Cursor的使用是提升Android应用性能的关键。开发者应当关注查询效率、内存管理和数据分段加载,确保应用在处理大量数据时仍能保持流畅的用户体验。通过遵循这些最佳实践,可以有效地避免Cursor...
本篇将详细介绍如何在Android中获取通话记录,并封装工具类以方便使用,同时展示如何将获取的数据展示在ListView中。 首先,我们需要了解Android中的CallLog数据库。Android系统维护了一个名为`CallLog`的内置...
你可以通过研究这个项目的源代码,学习如何将Android中的数据结构(如ArrayList或Cursor)与jxl库结合,实现数据的导出功能。 总之,使用jxl库在Android上快速导出Excel表格需要理解jxl的API,处理Android特有的...
本篇将详细讲解如何使用Android自带的`DownloadManager`来实现这个功能。 `DownloadManager`是Android系统提供的一个服务,用于在后台下载大文件,特别适合用来下载应用更新。它具有良好的兼容性,从Android 2.3...
libaums是Android上一个用于访问USB存储设备(如U盘)的库,它基于Android开放源码项目(AOSP)的USBMassStorageDriver,并提供了简单的API接口供开发者使用。本篇将深入探讨如何利用libaums在Android应用中进行U盘...
Android系统提供了丰富的API接口供开发者使用,使得我们能够方便地读取、操作甚至监听短信的变化。下面将详细介绍如何在Android中获取短信。 一、权限配置 在AndroidManifest.xml文件中,你需要添加以下权限来访问...
以上就是Android中加载本地联系人的一种实现方法,可以根据实际需求进行调整和优化,比如增加头像显示、分组显示等高级功能。通过这种方式,开发者能够方便地将用户的联系人信息整合到自己的应用程序中。
描述中提到的“查看android.provider包中的uri内容”,可能是指开发者使用某种工具或者方法来查看和分析`android.provider`包中各个类的`URI`定义和使用情况。这有助于理解如何与系统内容提供者进行交互,获取或修改...
本篇文章将深入探讨如何在Android应用程序中有效地使用CursorAdapter,以及涉及的核心方法newView()和bindView()。 首先,CursorAdapter是BaseAdapter的一个子类,它的主要作用是将Cursor对象中的数据绑定到...
本文将深入探讨如何使用Android Studio来读取手机的通讯录,这是一个非常实用且基础的知识点,适用于移动应用开发。 首先,我们要了解在Android中读取通讯录的权限管理。自Android 6.0(API级别23)开始,系统实行...
3. 使用ContentResolver的query()方法进行查询,传入Uri和可选的查询参数。例如,如果你想获取所有短信,可以不传入任何参数。如果想筛选特定类型的短信,如只读取收件箱中的短信,可以传入`Uri.parse("content://...