如何将房间持久性库与预填充数据库一起使用?

我想使用预先填充的数据库的房间,但我不明白如何告诉房间在哪里可以find我的数据库。

我现在把它放在src/main/assets/databases ,当我为Room数据库创build实例时,我这样创build它:

 Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "justintrain.db").allowMainThreadQueries().build(); 

这样,我认为它是每次创build一个新的数据库,或者反正它不使用预先填充的数据库。

我怎样才能find我的分贝?

  • Android SQLite查询列不为空且不为空
  • Singleton与Android中Database Helper类的静态内部类
  • SQLite返回错误代码14
  • 使用Singleton设计模式正确打开/关闭数据库
  • 在android数据库中存储long值
  • Android Room编译时警告外​​键中的列不是索引的一部分。 这是什么意思?
  • webview崩溃NullPointerException android.webkit.WebViewDatabase.initDatabase(WebViewDatabase.java:234)
  • 应该为数据库中的每个表都有一个SQLiteOpenHelper吗?
  • 这就是我解决这个问题的方法,以及如何使用预先填充的数据库(最多到房间v。alpha5)

    • 把你的SQLite DB database_name.db放到assets/databases文件夹中

    • 从这个回购的文件,把它们放在一个叫做sqlAsset

    • 在您的AppDatabase类中,相应地修改您房间的数据库创build代码:

       Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "database_name.db") .openHelperFactory(new AssetSQLiteOpenHelperFactory()) .allowMainThreadQueries() .build(); 

    请注意,您必须使用"database_name.db"而不是getDatabasePath()或其他方法:它只需要文件的名称。

    我遇到了同样的问题,所以我创build了一个完全一样的库。 接受的答案工作,但我认为使用图书馆更容易。

     AppDatabase db = RoomAsset .databaseBuilder(context.getApplicationContext(), AppDatabase.class, "database_name.db") .build(); 

    把它添加到你的根build.gradle在版本库的末尾:

     allprojects { repositories { ... maven { url "https://jitpack.io" } } } 

    添加依赖关系

     dependencies { // ... other dependencies implementation 'com.github.humazed:RoomAsset:v1.0' } 

    你可以在这里find这个库: https : //github.com/humazed/RoomAsset

    您只需将assets/databases复制到app/databases
    而不是在databaseBuilder添加addMigrations()
    它会保存你的数据