我目前正在进行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;
}
所以,如果我启动我的应用程序,为什么它总是创建一个新的数据库?
答案 0 :(得分:3)
<强> fallbackToDestructiveMigration 强>
如果找不到将旧数据库模式迁移到最新模式版本的迁移,则允许Room破坏性地重新创建数据库表。
如果未找到迁移,则重新创建数据库并清除所有数据。
尝试删除fallbackToDestructiveMigration
public static AppDatabase getDatabase(Context context){
if(INSTANCE == null){
INSTANCE = Room.databaseBuilder(context, AppDatabase.class, DATABASE_NAME)
.allowMainThreadQueries()
.build();
}
return INSTANCE;
}