首页 > 解决方案 > 房间数据库无此类表异常

问题描述

所以我在关闭数据库之前将数据库文件导出到外部存储,在导出数据库后我想继续使用这个关闭的数据库如何在不重新启动应用程序的情况下重新打开同一个数据库?如果我重新启动应用程序一切正常,但如果我只是重新启动MainActivity调用getInstance()方法并尝试从数据库应用程序崩溃中删除某些内容并产生此异常:

android.database.sqlite.SQLiteException: no such table: room_table_modification_log (code 1): , while compiling: DELETE FROM Note WHERE entryid = ?

destroyInstance()我使用方法关闭数据库:

companion object {
    private var INSTANCE: MyDatabase? = null

    var lock = Any()

    fun getInstance(context: Context): MyDatabase{
        synchronized(lock){
            if (INSTANCE == null){
                INSTANCE = Room.databaseBuilder(context.applicationContext, MyDatabase::class.java,"MyDB.db").build()
            }
            return INSTANCE!!
        }
    }

    fun destroyInstance() {
        if (INSTANCE?.isOpen == true){
            INSTANCE?.close()
        }

        INSTANCE = null
    }
}

标签: androidsqliteandroid-sqliteandroid-room

解决方案


推荐阅读