package com.bgycc.smartcanteen.data; import android.content.Context; import androidx.annotation.NonNull; import androidx.room.Database; import androidx.room.DatabaseConfiguration; import androidx.room.InvalidationTracker; import androidx.room.Room; import androidx.room.RoomDatabase; import androidx.sqlite.db.SupportSQLiteOpenHelper; import com.bgycc.smartcanteen.data.dao.CommandDao; import com.bgycc.smartcanteen.data.dao.PayDataDao; import com.bgycc.smartcanteen.data.dao.PayResponseDao; import com.bgycc.smartcanteen.entity.Command; import com.bgycc.smartcanteen.entity.PayData; import com.bgycc.smartcanteen.entity.PayResponse; import com.blankj.utilcode.util.Utils; @Database( entities = { Command.class, PayData.class, PayResponse.class }, version = 2, exportSchema = false) public abstract class DatabaseManager extends RoomDatabase { @NonNull @Override protected SupportSQLiteOpenHelper createOpenHelper(DatabaseConfiguration config) { return null; } @NonNull @Override protected InvalidationTracker createInvalidationTracker() { return null; } @Override public void clearAllTables() { } private static final String DB_NAME = "smart_canteen.db"; private static volatile DatabaseManager instance; public static synchronized DatabaseManager getInstance() { if (instance == null) { instance = create(Utils.getApp().getApplicationContext()); } return instance; } private static DatabaseManager create(final Context context) { return Room.databaseBuilder( context.getApplicationContext(), DatabaseManager.class, DB_NAME) .addCallback(new OldDataCompatible()) .addCallback(new FinishCommand()) .addCallback(new ForceToPayOffline()) .addMigrations(new _1To_2Migration()) // 一旦版本不兼容则清空数据库 .fallbackToDestructiveMigration() .allowMainThreadQueries() .build(); } public abstract CommandDao getCommandDao(); public abstract PayDataDao getPayDataDao(); public abstract PayResponseDao getPayResponseDao(); }