我对Cursor
Android 中的实现细节很感兴趣。我知道基本上它只是一个提供对数据库查询返回的结果集的随机读写访问的接口。我想知道特定的Cursor
实现:
- 它是一种存储数据库结果集的数据结构吗?
- 或者它只是一个只处理一行的结构?
我对Cursor
Android 中的实现细节很感兴趣。我知道基本上它只是一个提供对数据库查询返回的结果集的随机读写访问的接口。我想知道特定的Cursor
实现:
只是一些数据结构,它存储来自数据库的结果集
是的。
或者它是一些只处理一行的结构?
不完全是。游标可以根据源查询处理一行或多行。光标是数据映射,将包含与 source(select) 查询返回的行数一样多的行。因此,如果查询返回一百行,这些行将插入到 Cursor 并且 Cursor 包含这一百行。
您可以将光标想象为具有动态大小的数据映射(类似于列表),其中数据被放置为“行”。每行都有自己的行 id(行号,我们可以说是一些指针),当它们被插入到 Cursor 时逐渐生成,您可以简单地在具有此编号的行之间移动。隐式地,每个 Cursor 都有位于第一行(-1 位置)之前的“实际指针”,因此如果您调用c.getString(0)
期望,则会抛出任何内容,因为没有什么可检索的。
因此,您始终必须调用cursor.moveToFirst()
准备光标以进行读取,如果为空,则方法返回 false,因为没有行。