房间持久性库数据库在每次重新启动后都会被删除

时间:2018-02-24 17:18:06

标签: android database sqlite

我目前正在进行Android开发,并希望使用Room持久性库作为我的数据库。

我的DatabaseHelper的当前代码如下所示:

public abstract class AppDatabase extends RoomDatabase{

private static AppDatabase INSTANCE;

public static final String DATABASE_NAME = "fitdiary-db";
public abstract UserDAO userDAO();
public abstract ExerciseDAO exerciseDAO();
public abstract ExerciseProgressDAO exerciseProgressDAO();
public abstract WeightDAO weightDAO();

private final MutableLiveData<Boolean> mIsDatabaseCreated = new MutableLiveData<>();

public static AppDatabase getDatabase(Context context){

    if(INSTANCE == null){
        INSTANCE = Room.databaseBuilder(context, AppDatabase.class, DATABASE_NAME)
                .allowMainThreadQueries()
                .fallbackToDestructiveMigration()
                .build();

    }
    return INSTANCE;
}
public void destroyInstance(){
    INSTANCE = null;
}

private void updateDatabaseCreated(final Context context) {
    if (context.getDatabasePath(DATABASE_NAME).exists()) {
        setDatabaseCreated();
    }
}

private void setDatabaseCreated(){
    mIsDatabaseCreated.postValue(true);
}


public LiveData<Boolean> getDatabaseCreated() {
    return mIsDatabaseCreated;
}

所以,如果我启动我的应用程序,为什么它总是创建一个新的数据库?

1 个答案:

答案 0 :(得分:3)

<强> fallbackToDestructiveMigration

如果找不到将旧数据库模式迁移到最新模式版本的迁移,则允许Room破坏性地重新创建数据库表。

如果未找到迁移,则重新创建数据库并清除所有数据。

有关详细信息,请参阅此处https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.Builder.html#fallbackToDestructiveMigration()

尝试删除fallbackToDestructiveMigration

public static AppDatabase getDatabase(Context context){

    if(INSTANCE == null){
        INSTANCE = Room.databaseBuilder(context, AppDatabase.class, DATABASE_NAME)
                .allowMainThreadQueries()
                .build();

    }
    return INSTANCE;
}