Room學習三部曲
Android Room的學習之基本使用
Android Room的學習之關聯表
Android Room的學習之數據庫升級
Room的數據庫升級分爲兩種:
- 清空數據庫中的數據(不建議使用)
private static AppDatabase create(final Context context) {
return Room.databaseBuilder(
context,
AppDatabase.class,
DB_NAME)
//添加fallbackToDestructiveMigration方法
.fallbackToDestructiveMigration()
.build();
- 在原有數據的基礎上,添加自己想要的數據
private static AppDatabase create(final Context context) {
return Room.databaseBuilder(
context,
AppDatabase.class,
DB_NAME)
//添加addMigrations方法
.addMigrations(MIGRATION_1_4)
.build();
-
在原有表的基礎上添加新的字段
@Database(entities = {Student.class}, version = 2, exportSchema = false) public abstract class AppDatabase extends RoomDatabase { static Migration MIGRATION_1_2 = new Migration(1, 2) { @Override public void migrate(SupportSQLiteDatabase database) { // 爲舊錶添加新的字段 database.execSQL("ALTER TABLE Student " + " ADD COLUMN sex INTEGER NOT NULL DEFAULT 0"); } }; private static AppDatabase create(final Context context) { return Room.databaseBuilder( context, AppDatabase.class, DB_NAME) //添加addMigrations方法 .addMigrations(MIGRATION_1_2) .build(); }
-
添加新的表
@Database(entities = {Student.class}, version = 4, exportSchema = false) public abstract class AppDatabase extends RoomDatabase { static Migration MIGRATION_1_4= new Migration(1, 4) { @Override public void migrate(SupportSQLiteDatabase database) { // 爲舊錶添加新的字段 database.execSQL("ALTER TABLE Student " + " ADD COLUMN sex INTEGER NOT NULL DEFAULT 0"); // 添加新的表 database.execSQL("CREATE TABLE IF NOT EXISTS Book (bookName TEXT, studentId TEXT, bookId PRIMARY KEY )"); } }; private static AppDatabase create(final Context context) { return Room.databaseBuilder( context, AppDatabase.class, DB_NAME) //添加addMigrations方法 .addMigrations(MIGRATION_1_4) .build(); }
遇見的問題:
android Room 升級 java.lang.IllegalStateException: Migration didn't properly handle
這裏是升級數據庫遇到的,添加新的字段類似
sex INTEGER NOT NULL DEFAULT 0
一定要有默認值
TableInfo{name='Book', columns={studentId=Column{name='studentId', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, bookName=Column{name='bookName', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, bookId=Column{name='bookId', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}}, foreignKeys=[], indices=[]}
Found:
TableInfo{name='Book', columns={studentId=Column{name='studentId', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, bookName=Column{name='bookName', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, bookId=Column{name='bookId', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}}, foreignKeys=[], indices=[]}
查看不一樣的改成一樣的