gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:29:34 26 4
gpt4 key购买 nike

来自 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com