访问数据库游标并关闭它

时间:2014-06-10 06:04:47

标签: android database sqlite cursor

我有以下代码:

Cursor cursor = mDB.rawQuery(query, null);
                    cursor.moveToFirst();
                    do {
                        //do stuff
                    } while (cursor.moveToNext());
cursor.close();

query = "<some sql code>";
cursor = mDB.rawQuery(query, null);
  1. 我可以关闭光标,然后通过使用.rawQuery进行另一次查询调用再次打开它吗?
  2. 执行cursor.moveToFirst()时是否可以不检查游标是否为空?据我了解,查询只能返回0结果,这在做.moveToFirst时不会有问题吗?

2 个答案:

答案 0 :(得分:1)

你可以做到这一点,但它并没有做你认为的那样。你没有重新打开光标。您正在设置变量以引用新查询的新光标。

我在数据库查询中看到了null返回。我保留空检查。开销量很小。

答案 1 :(得分:0)

关于close()的{​​{3}}表示您将无法再次使用光标:

  

关闭Cursor,释放所有资源并制作它   完全无效。与deactivate()不同,对requery()的调用不会   使光标再次有效。

如果您在适配器中使用光标,则可以在设置新光标后关闭旧光标。 swapCursor()返回旧的Cursor,如果没有设置游标,则返回null,如果尝试交换先前设置的游标的同一实例,则返回null。知道了,你可以尝试这样的事情:

Cursor c = adapter.swapCursor(cursor);

if(c != null)
    c.close();