【问题标题】:Does the `Cursor` contain all the rows of the query or only the first row?Android 中的光标是如何工作的?
【发布时间】:2018-11-06 00:59:51
【问题描述】:

我一直在阅读 Android 中的 Cursor API 以及其他人的 cmets。但是有些东西我一直无法理解。

进行查询时,Cursor 是包含 ALL 查询的行还是仅第一行 查询?

如果它返回所有行,那么为什么人们说Cursor 指向查询的单行?因为有这个需要调用moveToFirst()Cursor移到下一行。

如果它返回所有行,那么它如何知道使用 getCount() 方法的查询中的行数?

例如,我试图通过将 CursorArrayList 进行比较来理解它。 在ArrayList 中,我们使用列表的index 访问每条记录。 这个index实际上是指向ArrayList的单个记录的指针

所以,据我所知,Cursor 中似乎只有 一行。当我调用moveX() 方法时,它将返回下一条数据记录。但是它怎么知道查询中的结果数呢?

【问题讨论】:

  • 它包含所有行:您可以使用moveToPosition(position) 直接获取它们,其中position 在[0..getCount() -1] 范围内
  • 人们说它指向单行怎么样?
  • 因为所有Cursor#get* 方法只能访问“当前”行 - 由Cursor#move* 方法之一选择的行
  • 好的...如果Cursor 包含所有行,那么返回当前行的对象的名称是什么?
  • 行的对象是什么?

标签: android mysql database cursor android-cursor


【解决方案1】:

一个 Cursor 对象从查询中返回,它将返回查询返回的所有行。

它包含所有行,但只指向 1 行,这意味着您要检索一行,您需要先将光标指向它

【讨论】:

  • 我认为这正是问题所在...Cursor 没有被移动..实际上被移动的是指针 Cursor 类里面有..对吗?因为Cursor整个 集..
  • @imran.razak 是的,Cursor 拥有完整的集合,但是当您说 Cusror.move 时,您将光标指向其内部的某个位置。比如我给你一张桌子,然后告诉你在第一行看,你还有桌子,你也是在里面看的人
  • 是的...但是内部的那个地方不是Cursor..它是并且那行不是@ 987654326@ object..它只是一行..
  • @imran.razak android 文档说:“ moveToFirst() 将光标移动到第一行。”是的,该行不是Cursor,而是Cursor points 指向此row
【解决方案2】:

Cursor 是一个逐行索引的对象。在查询的主要情况下,Cursor 指向结果集的 null 行。然后你应该把它移到你想要的第一行或每一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2017-08-08
    • 2012-06-27
    • 1970-01-01
    相关资源
    最近更新 更多