对许多实例使用单个游标

时间:2013-10-23 14:18:58

标签: android sqlite

我遇到了这个信息,没有关闭光标或数据库吞噬了内存。因此,当我在一百个测试用例中使用光标时,我可能会忘记在某处关闭它。我可以声明一个游标并重复使用它再次制作不同的引用,最后在OnDestroy()方法中关闭它。

Eg. Cursor a;

//Another function
a = as.rawQuery("select * from verse"+k, null);

//Another  function
a = bs.rawQuery("select * from hello", null); //Another database

//Another function
a =  cs.rawQuery("select * from chapter", null); //Another database

//OnDestroy()
a.close();

这是一个可行的解决方案吗?

1 个答案:

答案 0 :(得分:0)

您不能使用单个游标;每个rawQuery调用都会创建一个新的游标对象。 当您将新光标对象的引用分配给a时,旧对象不会关闭(并且您无法再访问它)。

要确保始终调用close,请使用try / finally:

Cursor c = db.rawQuery(...);
try {
    ... read data ...
} finally {
    c.close();
}

如果你有一个返回光标的辅助函数,请在调用函数中执行此操作。