Android SQLITE数据库和游标
我想知道是否有人能给我简要介绍一下Android游标。有几个具体问题: 1-我有一个在数据库查询后返回游标的方法:Android SQLITE数据库和游标,android,database,sqlite,database-cursor,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, O
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-我的数据库很小,只供我的应用程序使用-我可以保持它打开吗?1)光标只是指向查询返回的数据的指针,它不包含查询中的所有数据。这是为了提高性能/效率(不会立即读取大型结果集->使用更少的内存)。因此,如果关闭数据库,光标将无法检索数据->它是空的
2) 关闭光标时,所有关联的资源都将被释放->您无法访问与此光标关联的数据(因为它已被释放),但您可以使用此光标或其他光标进行新的查询。当你关闭一个数据库时,你不能再查询它(直到你重新打开它)
3) 总是关闭游标。否则您将遇到问题-如果光标未关闭且新查询被阻止,GC将发出抱怨
4) 如果你在应用程序完成后关闭它,则是 谢谢你的不在场证明。关于4-是否有一种方法可以检测应用程序何时完成?只要在活动到期时关闭数据库即可。您可以使用onDestroy方法进行此操作。应该是onPause()-文档中说我们不能依赖调用onDestroy()。是的,对不起。onPause()是一个更好的选择。我发现在onPause中关闭数据库有问题-我的活动使用光标为微调器提供数据。使用活动中的startManagingCursor()管理光标。如果我在onPause中关闭数据库,当活动恢复时,光标中没有数据。没有db.open()方法可以放在onResume()中。我尝试了db.getWriteableDatabase(),但没有帮助。