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

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

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

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

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

我怎样才能find我的分贝?

Solutions Collecting From Web of "如何将房间持久性库与预填充数据库一起使用?"

这就是我解决这个问题的方法,以及如何使用预先填充的数据库(最多到房间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()
它会保存你的数据