Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLITE数据库和游标_Android_Database_Sqlite_Database Cursor - Fatal编程技术网

Android SQLITE数据库和游标

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

我想知道是否有人能给我简要介绍一下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-我的数据库很小,只供我的应用程序使用-我可以保持它打开吗?

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

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

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


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

谢谢你的不在场证明。关于4-是否有一种方法可以检测应用程序何时完成?只要在活动到期时关闭数据库即可。您可以使用onDestroy方法进行此操作。应该是onPause()-文档中说我们不能依赖调用onDestroy()。是的,对不起。onPause()是一个更好的选择。我发现在onPause中关闭数据库有问题-我的活动使用光标为微调器提供数据。使用活动中的startManagingCursor()管理光标。如果我在onPause中关闭数据库,当活动恢复时,光标中没有数据。没有db.open()方法可以放在onResume()中。我尝试了db.getWriteableDatabase(),但没有帮助。