I have written a room migration code which crashes due to the following error:
This is the error that I'm getting : no such column: LocationID (code 1): , while compiling: CREATE TABLE IF NOT EXISTS LocationData (Latitude
INTEGER, Longitude
INTEGER, Accuracy
INTEGER, DateTime
TEXT, status
TEXT NOT NULL, TechUserID
INTEGER, Speed
INTEGER, AndroidVersion
TEXT, AppVersion
TEXT, PRIMARY KEY(LocationID
))
This is the migration code that I have written
private val MIGRATION_13_14 = object : Migration(13, 14) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
"CREATE TABLE IF NOT EXISTS surveyReasonField (id INTEGER NOT NULL, Reason TEXT, ReasonID INTEGER, IsAccountNumberRequired INTEGER, IsMeterSerialNumberRequired INTEGER, IsCTRatioRequired INTEGER, IsMeterTypeRequired INTEGER, IsGPSCoordinateRequired INTEGER, IsCustomerNameRequired INTEGER, IsBuildingNameandNumberRequired INTEGER, IsStreetNumberRequired INTEGER, IsInstallLocationRequired INTEGER, IsBuildingTypeRequired INTEGER, IsSignalAvailabilityRequired INTEGER, IsTypeofAntennaRequired INTEGER, IsMeterPanelConditionRequired INTEGER, IsMeterPanelLockStatusRequired INTEGER, IsSafeToWorkRequired INTEGER, IsCutoutConditionRequired INTEGER, IsCableConditionRequired INTEGER, IsCustomerContactDetailsRequired INTEGER, IsReadinessofInstallationRequired INTEGER, IsMeterPanelNumberRequired INTEGER, IsMeterDataImageRequired INTEGER, IsMeterPanelImageRequired INTEGER, IsCutOutImageRequired INTEGER, IsCableConditionImageRequired INTEGER, IsCustomerEmailRequired INTEGER, IsSignalTypeRequired INTEGER, PRIMARY KEY(`id`))"
)
database.execSQL(
"ALTER TABLE settingEntity ADD COLUMN NoOfDaysForImageDeletion INTEGER"
)
database.execSQL(
"CREATE TABLE IF NOT EXISTS LocationData (`Latitude` INTEGER, `Longitude` INTEGER, `Accuracy` INTEGER, `DateTime` TEXT, `status` TEXT NOT NULL, `TechUserID` INTEGER, `Speed` INTEGER, `AndroidVersion` TEXT, `AppVersion` TEXT, PRIMARY KEY(`LocationID`))"
)
database.execSQL(
"ALTER TABLE settingEntity ADD COLUMN IsLiveTrackingEnabled INTEGER"
)
}
}
The correct statement for "LocationData" should be
database.execSQL(
"CREATE TABLE IF NOT EXISTS LocationData (`LocationID` INTEGER NOT NULL,`Latitude` INTEGER NOT NULL, `Longitude` INTEGER NOT NULL, `Accuracy` INTEGER NOT NULL, `DateTime` TEXT NOT NULL, `status` TEXT, `TechUserID` INTEGER NOT NULL, `Speed` INTEGER NOT NULL, `AndroidVersion` TEXT NOT NULL, `AppVersion` TEXT NOT NULL, PRIMARY KEY(`LocationID`))"
)
My doubt is what should I do so that the app will not crash next time. Should I use "fallbackToDestructiveMigrationFrom()" or "fallbackToDestructiveMigrationOnDowngrade()". My objective is to stop the app from crashing and any method given here or from anywhere is fine as long the existing data is not losed.