5
을 닫은 후 DB를 종료해야합니까 :안드로이드 : 우리가 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'는 동일한 데이터베이스를 효과적으로 닫습니다.
stack-trace는 닫는 커서도 데이터베이스 닫기를 시도 함을 보여줍니다. 이러한 시나리오에서 DB를 닫는 것은 필수적이지 않아야합니다. 제가 여기서 몇 가지 요점을 놓치고 있다고 언급하십시오. – PushpRaj
방금 내가 뭐라 말했는지 말씀 드렸습니다. :/데이터베이스를 닫아야합니다. 데이터베이스가 이미 명시 적으로 닫히지 않은 경우 (그리고 실제로 종료되기 전에 모든 미해결 커서가 닫힐 때까지 기다리는 중입니다) 여기에서보고있는 지점에서 닫히지 않습니다. – hackbod
내가 본 것에서 데이터베이스를 닫고 커서를 닫으려고하면 다음과 같은 예외가 발생합니다 :'연결 풀이 닫혀서이 작업을 수행 할 수 없습니다 .'. 커서를 기다리지 않습니다. – ElyashivLavi