마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

java.lang.IllegalStateException: The database is not open.

0 추천
    Process: com.example.yhw, PID: 7359
    java.lang.IllegalStateException: The database '/data/user/0/com.example.yhw/databases/memo_database' is not open.
        at android.database.sqlite.SQLiteDatabase.throwIfNotOpenLocked(SQLiteDatabase.java:2954)
        at android.database.sqlite.SQLiteDatabase.createSession(SQLiteDatabase.java:564)
        at android.database.sqlite.-$$Lambda$RBWjWVyGrOTsQrLCYzJ_G8Uk25Q.get(Unknown Source:2)
        at java.lang.ThreadLocal$SuppliedThreadLocal.initialValue(ThreadLocal.java:284)
        at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:180)
        at java.lang.ThreadLocal.get(ThreadLocal.java:170)
        at android.database.sqlite.SQLiteDatabase.getThreadSession(SQLiteDatabase.java:558)
        at android.database.sqlite.SQLiteProgram.getSession(SQLiteProgram.java:123)
        at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
        at androidx.sqlite.db.framework.FrameworkSQLiteStatement.executeUpdateDelete(FrameworkSQLiteStatement.java:46)
        at androidx.room.EntityDeletionOrUpdateAdapter.handle(EntityDeletionOrUpdateAdapter.java:70)
        at com.example.yhw.MemoDao_Impl.update(MemoDao_Impl.java:162)
        at com.example.yhw.PuzzleActivity$onCreate$2$1$1.run(PuzzleActivity.kt:129)
        at java.lang.Thread.run(Thread.java:764)
2021-09-27 06:15:38.226 7359-7418/com.example.yhw E/ROOM: Cannot run invalidation tracker. Is the db closed?
    android.database.sqlite.SQLiteException: no such table: room_table_modification_log (code 1 SQLITE_ERROR[1]): , while compiling: SELECT * FROM room_table_modification_log WHERE invalidated = 1;
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1229)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:703)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1865)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1840)
        at androidx.sqlite.db.framework.FrameworkSQLiteDatabase.query(FrameworkSQLiteDatabase.java:161)
        at androidx.room.RoomDatabase.query(RoomDatabase.java:328)
        at androidx.room.RoomDatabase.query(RoomDatabase.java:311)
        at androidx.room.InvalidationTracker$1.checkUpdatedTable(InvalidationTracker.java:414)
        at androidx.room.InvalidationTracker$1.run(InvalidationTracker.java:388)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
2021-09-27 06:15:38.254 7359-7359/com.example.yhw E/ViewRootImpl: sendUserActionEvent() returned.

 

잘 작동되던 데이터베이스가 갑자기 열려있지 않다고 하네요.

특정 프래그먼트가 화면에 출력되도록 하기만 하면, 이런 오류가 나네요.

앱을 가장 처음에 설치할 때에는 잘되다가, 이 특정 프래그먼트만 화면에 출력시키고 나면,

그때부터는 db에 정보를 추가 하거나 업데이트 하거나 삭제 할 때마다 이런 오류 메시지를 띄워주네요.

 

예전에는 분명히 아무 문제없이 잘 작동 됐거든요. 근데 몇 달만에

다시 설치해보니까 안되더라구요.

무슨 버전 업을 한것도 아니고, db쪽은 모든게 그대로인데 이러네요.

상쾌한 (1,890 포인트) 님이 2021년 9월 27일 질문

1개의 답변

+1 추천
 
채택된 답변

에러로그에 다음과 같은 메세지가 있네요.

android.database.sqlite.SQLiteException: no such table: room_table_modification_log (code 1 SQLITE_ERROR[1]): , while compiling: SELECT * FROM room_table_modification_log WHERE invalidated = 1;

room_table_modification_log테이블이 없다고 나오는데, 마이그러이션이나 room 버전 관련한 에러처럼 보이는데, 이 부분을 체크해 보세요.

에러의 실제 원인은 room_table_modification_log가 

spark (224,800 포인트) 님이 2021년 9월 27일 답변
상쾌한님이 2021년 9월 28일 채택됨
제가 마이그레이션을 잘 못해서 미리 여쭤보는건데요.
앱을 지울때, 데이터 베이스 관련 데이터가 제대로 지워지지 않으면, 이런 오류가 발생할 수도 있는건가요?
제가 마이그레이션을 못하니까, 앱 테스트할때, 앱 전체를 다 지웠다가 새로 설치했었거든요. 그렇게 안하면, 매번 설치할때마다 마이그레이션 해줘야 하니까요.
버전 문제는 아닌가봐요. 버전 업 해도 똑같아요.
앱을 uninstall하면 데이터베이스도 같이 삭제되는 데요.
한가지 해볼 수 있는 방법 중 하나는 데이터베이스 이름을 바꾸어 보세요.
아~ 전에 뭐 만든다고, 건드려 놓은게 있는데, 주석처리 안해놓았더니 이렇게 된거였어요. ; 뭐부터 해결해야 할지 몰라서 혼란스러웠는데, 답변 덕분에 범위가 많이 좁혀진것 같아요. 감사합니다.
val appDatabase: MemoDatabase = MemoDatabase.getInstance(requireContext())
appDatabase.close()
...