android:关闭游标后是否需要关闭Db

标签 android sqlite

来自 SQLiteCursor 的源代码(堆栈跟踪):

at android.database.sqlite.SQLiteDatabase.dbclose(Native Method)
at android.database.sqlite.SQLiteDatabase.onAllReferencesReleased(SQLiteDatabase.java:325)
at android.database.sqlite.SQLiteClosable.releaseReference(SQLiteClosable.java:45)
at android.database.sqlite.SQLiteProgram.onAllReferencesReleased(SQLiteProgram.java:119)
at android.database.sqlite.SQLiteClosable.releaseReference(SQLiteClosable.java:45)
at android.database.sqlite.SQLiteProgram.close(SQLiteProgram.java:296)
at android.database.sqlite.SQLiteQuery.close(SQLiteQuery.java:136)
at android.database.sqlite.SQLiteCursor.close(SQLiteCursor.java:506)

这是否意味着关闭最后一个游标也将关闭数据库。我们不需要显式关闭它,如以下代码所示:

    SQLiteDatabase rdb = db.getReadableDatabase();
    Cursor resultCursor = null;
    String patternQuery = SQLiteQueryBuilder.buildQueryString(true, "Store", columns, where, null, null, null, null);

    try
    {
        resultCursor = rdb.rawQuery(patternQuery, null);


        resultCursor.moveToFirst();
        if (resultCursor.getCount() > 0)
        {
            while (!resultCursor.isAfterLast())
            {
                result.add(resultCursor.getString(0));
                resultCursor.moveToNext();
            }
        }
    }
    catch (Exception e)
    {
        Log.d("DB", "Caught an exception while getting pattern based results: " + e);
    }
    finally
    {
        if (resultCursor != null)
        {
            resultCursor.close();
        }
        if (rdb.isOpen())
        {
            rdb.close();
        }
    }

所以在这里,我们不需要关闭 rdb?

注意:游标对象保留对数据库的引用,因此它在每次查询时都会获得相同的锁。因此,'SQLiteDatabse.dbclose' 有效地关闭了同一个数据库。

最佳答案

您确实需要关闭它。在您显式关闭数据库并且所有 Activity 游标都已关闭之前,数据库不会关闭。

关于android:关闭游标后是否需要关闭Db,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7087499/

相关文章:

java - LibGDX - 异步加载和处理纹理

Android - 如何获取电子表格表单 key

android - 数据库搜索只返回 1 个搜索结果

qt - 如何将sqlite驱动交付给最终用户?

database - 如何建立适用于所有 Mac 的 Java DB 连接,以便其 JAR 能够在 Windows 10 上建立连接?

android - 无法在 Android 上创建 SQLite 表

android - 为什么 ContentResolver 看不到其他应用添加的文件?

android - 没有房间的分页图书馆

android - Android Studio显示错误,gradle文件,请找到解决方案,它摇摆一些发现错误

c - 从 sqlite3_column_blob() 方法获取的指针是否需要删除?