使用复制粘贴的预填充数据库进行Room fallbackToDestructiveMigration

时间:2018-08-03 07:00:32

标签: java android android-room android-architecture-components android-jetpack

我的应用程序具有一个预先填充的数据库,我会定期对其进行更新。用户无需编辑任何数据,因此使用fallbackToDestructiveMigration进行的迁移应该可以正常工作。

问题是我将数据库从资产文件夹复制粘贴到应用程序的数据库文件夹。因此,当我不得不迁移到新数据库时。建立数据库之前,我无法复制粘贴新文件。我要的顺序是:

  1. 使用fallbackToDestructiveMigration(破坏先前的数据库)
  2. 复制粘贴数据库文件
  3. 构建

只有在使用自定义迁移的情况下,我才能执行此操作,但这最终会导致每个版本的迁移过多,从而使代码不必要地重复。

这是我当前的代码:

public synchronized static AppDatabase getInstance(final Context context, final AppExecutors executors) {
    if (sInstance == null) {
        synchronized (AppDatabase.class) {
            if (sInstance == null) {

                //DestructiveMigration and Build
                sInstance = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, DATABASE_NAME)
                        .fallbackToDestructiveMigration().build();

                //Copy paste new db file
                copyAttachedDatabase(context.getApplicationContext(),DATABASE_NAME);

                sInstance.updateDatabaseCreated(context.getApplicationContext());
            }
        }
    }
    return sInstance;
}

我想找到一种运行fallbackToDestructiveMigration的方法->复制粘贴数据库文件->构建。

现在,我的代码运行fallbackToDestructiveMigration-> build->复制粘贴DB文件。此命令将不会加载数据库文件。

0 个答案:

没有答案