参考: https://developer.android.com/training/data-storage/room/migrating-db-versions
1. room 的入口文件要找到, 在我的项目如下. ( 增加 @Database 中的version, MIGRATION... 以及 db()函数中的语句)
// 这里的version = 2 很重要, 会自动执行migration ( 类似 rake db:migrate) @Database(entities = {Market.class}, version = 2, exportSchema = false) public abstract class SQLite extends RoomDatabase { public abstract MarketDao marketDao(); private static SQLite db; // 1 号migration, 起点是版本1, 终点是版本2 static final Migration MIGRATION_1_ADD_HIGH_LOW_TO_MARKETS = new Migration(1, 2){ @Override public void migrate(SupportSQLiteDatabase database){ database.execSQL("alter table markets add column high real"); database.execSQL("alter table markets add column low real"); } }; public static SQLite db() { if (db == null) { // SQLite数据库文件存储在 /data/data/${package_name}/databases/${app_name}.sqlite 中 db = Room.databaseBuilder(BaseApplication.getContext(), SQLite.class, Constants.APP_NAME + ".sqlite") .allowMainThreadQueries() // 允许主线程执行SQL语句 .addMigrations(MIGRATION_1_ADD_HIGH_LOW_TO_MARKETS) // 自动加载migration . .build(); } return db; } }
2. 修改对应的model 文件,把增加的两个列,加上.
@Entity(tableName = "markets") public class Market { + @ColumnInfo(name = "high") + public Double high; + @ColumnInfo(name = "low") + public Double low; + + }
3. 其他地方,正常使用即可.