【问题标题】:Move cursor to row by one of the columns将光标移至某一列的行
【发布时间】:2011-12-22 19:49:56
【问题描述】:

在查询了我想要的数据后,我现在有了一个包含所有数据的光标,并在 Listview 中呈现给用户。

当用户单击一个项目以进行编辑时,我将光标移动到正确的位置cursor.moveToPosition(pos),我可以从中获取我需要的所有项目数据:ID、标题、文件夹与否、父文件夹。

现在我有了父文件夹 ID,如何使用它来获取项目文件夹的标题,以便向用户显示项目当前所在的文件夹? 我不能使用移动到位置,因为我不知道父位置,只知道它的 ID。

这是 db 的示例。

FOLDER 列 -> 0 = 不是文件夹 (false),1 = 文件夹 (true)

PARENT 列 -> 保存其文件夹的 ID

ID  TITLE     FOLDER   PARENT
1   folder1      1        0
2   item1        0        1
3   item2        0        1
4   folder2      1        1
5   item1        0        4
6   item2        0        4
7   folder3      1        4
8   item1        0        7
9   item2        0        7

示例: 用户编辑 item3。我将光标移动到位置 2(从 0 开始)。我得到 item3 父级,即 ID=1。如何获得 ID=1 的 TITLE。

希望它足够清楚:) 谢谢!

【问题讨论】:

    标签: android sqlite cursor android-cursor


    【解决方案1】:

    你可以使用:

    yourCursor.getString(yourCursor.columnIndex("TITLE"));
    

    这将为您提供光标当前指向的行中“TITLE”列中的值。

    【讨论】:

    • nope.. 这会给我所选项目的标题。我想要所选项目的父项的标题(在我的示例中为文件夹 1)
    【解决方案2】:

    您可以再次循环游标,检查每个 id 是否为 1,然后获取标题。

    cur.moveToFirst();
    while (cur.isAfterLast() == false) {
      if (cur.getInt(cur.columnIndex("ID") == 1) {
          String title = cur.getString(cur.columnIndex("TITLE"));
      }       
      cur.moveToNext();
    }
    

    或者您可以发出一个新的查询,其中 id = 1。

    【讨论】:

    • 谢谢,我担心这些是我唯一的选择 :) 我想我会使用第二个...(就像我用它打开文件夹一样)应该更快。
    • 使用(!cur.isAfterLast()) 比使用(cur.isAfterLast() == false) 更好。无论如何,它解决了我遇到的问题,不是这个。
    【解决方案3】:

    在您的查询中,您可以包含一个 JOIN 以将父级的标题作为另一列加载到您的 ResultSet 中,然后在以后检索它而无需进行另一次查询或再次迭代 Rs。

    【讨论】:

      猜你喜欢
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      相关资源
      最近更新 更多