kar*_*arl 5 android android-room
如果我在启用破坏性回退的情况下运行 Room 迁移:
Room.databaseBuilder(applicationContext, MyDb::class.java, "database-name")
.fallbackToDestructiveMigration()
.build()
Run Code Online (Sandbox Code Playgroud)
有没有办法确定是否触发了破坏性迁移以及迁移是否成功完成?我希望能够记录一些信息以进行跟踪。
您可以使用 RoomCallback并将其添加到您的数据库中,它有以下方法:您可以在哪里使用onDestructiveMigration
这是一个示例示例
\n爪哇:
\n@Database(entities = {...}, version = 1)\n\npublic abstract class MyDatabase extends RoomDatabase {\n\n private static final String DATABASE_NAME = "myDatabaseName.db";\n\n private static volatile MyDatabase INSTANCE;\n\n public static MyDatabase getDatabase(final Context context) {\n if (INSTANCE == null) {\n synchronized (MyDatabase.class) {\n if (INSTANCE == null) {\n // Create database here.\n INSTANCE = Room.databaseBuilder(context.getApplicationContext(),\n MyDatabase.class, DATABASE_NAME)\n .fallbackToDestructiveMigration()\n .addCallback(mCallback) // Trigger the callback\n .build();\n }\n }\n }\n return INSTANCE;\n }\n\n\n /*\n * Callback when database is created & when it\xe2\x80\x99s opened\n * */\n static RoomDatabase.Callback mCallback = new Callback() {\n\n\n /*\n * Callback when database is first-time created or recreated after destruction\n * */\n @Override\n public void onCreate(@NonNull SupportSQLiteDatabase db) { // \n super.onCreate(db);\n Log.i("LOG_TAG", "Database is created");\n }\n\n /*\n * callback when the database is opened\n * */\n @Override\n public void onOpen(@NonNull SupportSQLiteDatabase db) { \n super.onOpen(db);\n Log.i("LOG_TAG", "Database is opened");\n }\n\n /*\n * Called after the database was destructively migrated\n * */\n @Override\n public void onDestructiveMigration(@NonNull SupportSQLiteDatabase db) {\n super.onDestructiveMigration(db);\n Log.i("LOG_TAG", "Database is destructed");\n }\n };\n\n}\nRun Code Online (Sandbox Code Playgroud)\n科特林:
\n@Database(entities = [...], version = 1)\nabstract class MyDatabase : RoomDatabase() {\n\n companion object {\n\n private const val DATABASE_NAME = "myDatabaseName.db"\n private var INSTANCE: MyDatabase? = null\n\n fun getInstance(context: Context): MyDatabase {\n return INSTANCE ?: synchronized(this) {\n val instance = Room.databaseBuilder(\n context,\n MyDatabase::class.java,\n DATABASE_NAME\n ).fallbackToDestructiveMigration()\n .addCallback(mCallback) // Trigger the callback\n .build()\n INSTANCE = instance\n instance\n }\n }\n\n /*\n * Callback when database is created & when it\xe2\x80\x99s opened\n * */\n var mCallback: Callback = object : Callback() {\n \n /*\n * Callback when database is first-time created or recreated after destruction\n * */ \n override fun onCreate(db: SupportSQLiteDatabase) {\n super.onCreate(db)\n Log.i("LOG_TAG", "Database is created")\n }\n \n /*\n * callback when the database is opened\n * */\n override fun onOpen(db: SupportSQLiteDatabase) { \n super.onOpen(db)\n Log.i("LOG_TAG", "Database is opened")\n }\n\n /*\n * Called after the database was destructively migrated\n * */\n override fun onDestructiveMigration(db: SupportSQLiteDatabase) {\n super.onDestructiveMigration(db)\n Log.i("LOG_TAG", "Database is destructed")\n }\n \n }\n }\n \n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |