5

我想知道是否有人可以简要介绍一下 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 - 如果游标是局部变量,我是否需要在游标上调用 close,还是可以将其留给垃圾收集器进行清理?

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

4

1 回答 1

9

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

2)当你关闭一个游标时,所有关联的资源都被释放->你不能访问与这个游标关联的数据(因为它已经被释放了),但是你可以使用这个游标或其他游标进行新的查询。当你关闭一个数据库时,你不能再查询它(直到你重新打开它)。

3) 始终关闭游标。否则你会遇到问题——如果游标没有关闭并且新的查询被阻止,GC 会抱怨。

4)如果您在应用程序完成时关闭它,是的。

于 2011-03-27T15:49:20.417 回答