android - SQLite 数据库和游标

标签 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 是局部变量,我是否需要关闭它,还是可以将其留给垃圾收集器进行清理?

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

最佳答案

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

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

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

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

关于android - SQLite 数据库和游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5450050/

相关文章:

Android - AQuery 在回调方法上获取图像

android - 如何使用内容提供程序删除前 "n"行

java - @ManyToMany 关系中表的 JPA 2.0 CriteriaQuery

sql - 在 SQLite 中使用大小写更新命令

android - SQLite 中的 Where 子句在 android :( 中不起作用

java - android market ://details? id=不适用于应用程序

java - 如何在Android的PreferenceScreen中使用textview?

mysql - Doctrine2 - 哪种方法更合适?

MySQL CLAUSE可以变成一个值吗?

c# - sqlite 不识别通用列表