2012-11-23 2 views
-1

내 전체 응용 프로그램이 잘 실행되고 있지만 로그캣을 볼 때 MyDBinstance.close() 문으로 데이터베이스를 닫은 후에도 데이터베이스와 같은 오류 메시지가 표시되지 않습니다. 그들은 왜 다시 오나요?, 제 신청서에 해롭지 않습니까?데이터베이스 안드로이드 sqlite에서 닫히지 않은 오류

11-23 23:09:03.593: E/SQLiteDatabase(30762): close() was never explicitly called on database '/data/data/dlp.android.digichronicle/databases/widget.sqlite' 
11-23 23:09:03.593: E/SQLiteDatabase(30762): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1943) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1007) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:962) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at dlp.android.digichronicle.DBHandandler.openDataBase(DBHandandler.java:117) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at dlp.android.digichronicle.inter.FetchingData(inter.java:95) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at dlp.android.digichronicle.inter.onCreate(inter.java:29) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.app.Activity.performCreate(Activity.java:4465) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.os.Looper.loop(Looper.java:137) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at android.app.ActivityThread.main(ActivityThread.java:4424) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at java.lang.reflect.Method.invokeNative(Native Method) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at java.lang.reflect.Method.invoke(Method.java:511) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
11-23 23:09:03.593: E/SQLiteDatabase(30762): at dalvik.system.NativeStart.main(Native Method) 
11-23 23:09:03.752: I/dalvikvm(30762): threadid=3: reacting to signal 3 
11-23 23:09:03.811: I/dalvikvm(30762): Wrote stack traces to '/data/anr/traces.txt' 
11-23 23:09:16.182: I/System.out(30762): got from accounts1.0exp1.0 
11-23 23:09:16.332: I/System.out(30762): Bundle[mParcelledData.dataSize=52] 
+0

코드를 입력하십시오. – arjoan

+0

커서를 닫았습니까? – Ahmad

+0

예, 사용한 후에 모든 데이터 세트를 닫아야합니다. 각각의 메서드에서 sqlite 데이터 셋/커서를 사용하는 try..finally 블록을 사용하십시오. – dougcunha

답변

2

당신은 당신이 항상 커서를 닫습니다 확인하기 위해 다음과 같이 수행 할 수 있습니다 :

Cursor c = null; 
try { 

    c = somehowCreateACursor(); 

} finally { 

    if(c != null) { 
     c.close(); 
    } 

} 
+0

고맙습니다. 지금 다른 질문이 있습니다. 어떻게 사이의 합계() 및 BETWEEN SQL 쿼리에서 날짜 사이에 동작 – user1848183

+1

@ user1848183 당신은 db.rawQuery를 호출하고 SQL 문자열을 전달할 수 –

0

데이터베이스를 종료 할 필요는 실제로 없다. 심지어 위의 명시된 예외가 발생할 것이라는 사실 후에도 그것은 결코 어떤 식 으로든 응용 프로그램에 해를 끼치 지 않을 것입니다.

+4

당신이 ** 항상 ** 데이터베이스를 사용하여 끝나면 닫아야합니다 할당 된 메모리를 해제하고 더 빠른 응용 프로그램을 가지고 있습니다. – Sam

+0

지원에 감사드립니다. :) – user1848183

관련 문제