2011-08-17 2 views
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'는 동일한 데이터베이스를 효과적으로 닫습니다.

답변

2

닫기가 필요합니다. 데이터베이스를 명시 적으로 닫을 때까지 데이터베이스가 닫히지 않습니다. 모든 활성 커서가 닫혔습니다.

+1

stack-trace는 닫는 커서도 데이터베이스 닫기를 시도 함을 보여줍니다. 이러한 시나리오에서 DB를 닫는 것은 필수적이지 않아야합니다. 제가 여기서 몇 가지 요점을 놓치고 있다고 언급하십시오. – PushpRaj

+1

방금 ​​내가 뭐라 말했는지 말씀 드렸습니다. :/데이터베이스를 닫아야합니다. 데이터베이스가 이미 명시 적으로 닫히지 않은 경우 (그리고 실제로 종료되기 전에 모든 미해결 커서가 닫힐 때까지 기다리는 중입니다) 여기에서보고있는 지점에서 닫히지 않습니다. – hackbod

+0

내가 본 것에서 데이터베이스를 닫고 커서를 닫으려고하면 다음과 같은 예외가 발생합니다 :'연결 풀이 닫혀서이 작업을 수행 할 수 없습니다 .'. 커서를 기다리지 않습니다. – ElyashivLavi

관련 문제