Android - 使用query()时Cursor如何从数据库加载数据?

时间:2014-06-08 07:37:02

标签: android sqlite

主要问题

游标如何从SQlite检索数据?它是否动态引用数据库文件地址?或者将它完全加载到内存中?虽然我知道dalvik虚拟机是基于地址的,但第一个假设更可能是真的,因为RAM内存和手机存储的性质几乎相同。

所以我的主要问题是知道如何加载数据?从加载到内存?或只是寻址数据库文件内容?

澄清:(样本只是为了澄清。你可以跳过它)

提出的问题是:

我创建了一个从sqlite加载数据的应用程序,并在listview中显示它们。数据库使用用户数据逐渐增长。现在,当数据库变大时,是否需要以使用加载更多分页的方式将数据加载到listview?或者它真的把它们装在一个地方? 虽然分页对响应性更好,但是,当尝试将数据导出为xls或pdf格式时,是否可以将光标检索到所有数据库并以xls或pdf格式保存数据?

android的消息传递应用程序在一个地方加载所有消息,即使我在一个帖子中有3000条消息也没有问题。

1 个答案:

答案 0 :(得分:2)

似乎Cursor的数据存储在内存或某种缓存文件中(正如我已正确提到的那样,它的实现细节)。 有两种方法可以证明/显示它不是原始数据库文件的原因。我确信还应该有一些理论解释。

  • 查看SQLiteCursor来源(可在您的sdk平台安装中找到):它基于CursorWindow
  

包含多个游标行的缓冲区。

     

最初在本地创建和使用时,CursorWindow是读写的。   当发送到远程进程(通过将其写入包)时,远程进程   进程接收光标窗口的只读视图。通常是   光标窗口将由生产者分配,填充数据,和   然后发送给消费者阅读。

此外,从源代码看, Window 包含该缓冲区中的所有数据。

  • 使用包含大量记录的测试数据库创建测试应用程序。请求所有记录并显示在列表中。虽然列表显示不断更改数据库内容并观察列表内容未更改(我假设消除了requery()和相关弃用的东西的使用。)