SQLiteDatabases和Cursors

时间:2011-03-27 15:02:37

标签: android database sqlite database-cursor

我想知道是否有人可以给我一个关于Android游标的简要概述。几个具体问题:

1 - 我有一个在数据库查询后返回游标的方法:

    public static Cursor getVehicles()
{
    SQLiteDatabase db = vehicleData.getReadableDatabase();
    Cursor cursor = db.query(TABLE_NAME, GET_VEHICLES_FROM_CLAUSE, null, null, null, null, ORDER_BY);

    return cursor;
}

为了做家务,我在return语句之前尝试了db.close()。但是,这会导致返回的游标不包含任何行。这是为什么?

2 - 关闭光标和关闭数据库有什么区别?

3 - 如果它是一个局部变量,我是否需要在Cursor上调用close,还是可以将它留给垃圾收集器进行清理?

4 - 我的数据库很小,仅供我的应用程序使用 - 我可以保持打开状态吗?

1 个答案:

答案 0 :(得分:9)

1)光标只是指向查询返回的数据的指针,它不包含查询中的所有数据。这是为了提高性能/效率(不会立即读取大型结果集 - >使用较少的内存)。因此,如果关闭数据库,则光标无法检索数据 - >它是空的。

2)关闭光标时,释放所有相关资源 - >您无法访问与此游标关联的数据(因为它已被释放),但您可以使用此游标或其他游标进行新查询。当您关闭数据库时,您不能再查询它(直到您重新打开它)。

3)始终关闭游标。否则您将遇到问题 - 如果光标未关闭且新查询被阻止,GC将会抱怨。

4)如果你的应用程序完成后关闭它,是的。