rummigrering ved hjælp af eksisterende booleske kolonnetyper
Definer migreringen for den nye attribut newAttribute med både en DEFAULT
værdi og som NOT NULL
.
Kode
database.execSQL("ALTER TABLE tableName ADD COLUMN newAttribute INTEGER DEFAULT 0 NOT NULL")
Fuld kode
@Database(entities = arrayOf(ModelName::class), version = 2)
@TypeConverters(Converters::class)
abstract class DatabaseName : RoomDatabase() {
abstract fun daoName(): DaoName
companion object {
private var INSTANCE: DatabaseName? = null
fun getAppDatabase(context: Context): DatabaseName {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.applicationContext,
DatabaseName::class.java, DATABASE_NAME)
.addMigrations(MIGRATION_1_2)
.build()
}
return INSTANCE as DatabaseName
}
val MIGRATION_1_2: Migration = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE tableName ADD COLUMN newAttribute INTEGER DEFAULT 0 NOT NULL")
}
}
}
}
SQLite har ikke en boolesk datatype. Rum kortlægger det til en INTEGER
kolonne, kortlægning true
til 1
og falsk til 0
.Jeg tror, at nedenstående kode ville være arbejde
database.execSQL("ALTER TABLE xyz_table ADD COLUMN abc INTEGER DEFAULT 0");
Det er udokumenteret.