How to use Room Persistence Library with pre-populated database?

后端 未结 8 1011
别那么骄傲
别那么骄傲 2020-11-28 02:49

I\'d like to use Room with a pre-populated database, but I can\'t understand how to tell Room where to find my database.

I\'ve now put it in src/main/assets/da

相关标签:
8条回答
  • 2020-11-28 03:19

    This is how I solved it, and how you can ship your application with a pre-populated database (up to Room v. alpha5)

    • put your SQLite DB database_name.db into the assets/databases folder

    • take the files from this repo and put them in a package called i.e. sqlAsset

    • in your AppDatabase class, modify your Room's DB creation code accordingly:

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

    Note that you have to use "database_name.db" and not getDatabasePath() or other methods: it just needs the name of the file.

    0 讨论(0)
  • 2020-11-28 03:23

    I was having the same problem so I created a library which does exactly that. the accepted answer work but I think it's easier to use a library.

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

    Add it to your root build.gradle at the end of repositories:

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

    Add the dependency

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

    you can find the library here: https://github.com/humazed/RoomAsset

    0 讨论(0)
提交回复
热议问题