【问题标题】:Android Room Library fails to copy database from AssetAndroid Room Library 无法从 Asset 复制数据库
【发布时间】:2020-05-18 21:50:29
【问题描述】:

我想从资产中复制 SQLite 数据库,但它没有复制它也没有抛出任何异常

@Database(entities = [UserDetails::class, CircleMaster::class], version = 1, exportSchema = false

abstract class AppDatabase : RoomDatabase() {abstract fun getLoginDao(): LoginDao

abstract fun getRegisterDao(): RegisterDao


companion object {
    @Volatile
    private var instance: AppDatabase? = null
    private val Lock = Any()
    operator fun invoke(context: Context) = instance ?: synchronized(Lock) {
        instance ?: buildDatabase(context).also {
            instance = it
        }
    }

    private fun buildDatabase(context: Context) = Room.databaseBuilder(
        context.applicationContext,
        AppDatabase::class.java,
        "Asset.db"
    ).createFromAsset("database/Asset.db").allowMainThreadQueries().build()
}}

【问题讨论】:

标签: android android-sqlite android-room


【解决方案1】:

其实我从这个链接得到了答案

Room: Database not created

when I tried to insert data that time database is copied from asset and data is inserted有些人会遇到迁移异常,我通过从资产数据库中删除房间主表解决了这个问题。

默认情况下,Room 使用 SQLiteOpenHelper,就像您可以直接使用它一样。

SQLiteOpenHelper 在您创建 SQLiteOpenHelper 实例时不会创建数据库。一旦您调用 getReadableDatabase()getWriteableDatabase(),它就会这样做。

从 Room 的角度来看,这意味着在您执行一些具体操作之前,例如调用命中数据库的 @Dao 方法,您的数据库将不会被创建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2019-12-30
    相关资源
    最近更新 更多