我想知道是否有人可以给我简要介绍一下 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 是局部变量,我是否需要关闭它,还是可以将其留给垃圾收集器进行清理?
4 - 我的数据库很小,只供我的应用程序使用 - 我可以让它保持打开状态吗?
最佳答案
1) 游标只是指向查询返回数据的指针,它并不包含查询中的所有数据。这是为了提高性能/效率(不会立即读取大型结果集 -> 使用的内存更少)。因此,如果关闭数据库,游标将无法检索数据 -> 它为空。
2) 当你关闭一个游标时,所有关联的资源都被释放 -> 你不能访问与这个游标关联的数据(因为它已经被释放),但是你可以使用这个或其他游标进行新的查询。当您关闭数据库时,您将无法再查询它(直到您重新打开它)。
3) 始终关闭游标。否则你会遇到问题——如果游标没有关闭并且新查询被阻止,GC 会提示。
4) 如果您在应用程序完成时关闭它,是的。
关于android - SQLite 数据库和游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5450050/