Комната не может перенести базу данных - PullRequest
0 голосов
/ 06 ноября 2019

Моя сущность

@Entity(tableName = "user_table")
data class User(
val userID:String,
val userName:String,
val userRoleName:String,
val adminID:String,
val name:String,
val email:String,
val phoneNumber:String,
val adminType:String,
val batchID:String,
val centerID:String,
val batchName:String,
val centerName:String,
val password:String
) {
    @PrimaryKey(autoGenerate = true)
    var id: Int = 0
}

Я добавил столбец пароля;

Миграция, которую я предоставил,

private val migration: Migration = object : Migration(1, 2) {
            override fun migrate(database: SupportSQLiteDatabase) {
                database.execSQL("ALTER TABLE user_table ADD COLUMN password TEXT")
            }
        }

Я использовал ее здесь

private fun buildDB(c: Context): MDatabase {
            val dbName = "lms_database.db"
            return Room.databaseBuilder(c.applicationContext, MDatabase::class.java, dbName)
                .addMigrations(migration)
                .build()
        }

Я получаю длинную ошибку:

java.lang.IllegalStateException: Migration didn't properly handle: user_table(app.database.entities.User).
 Expected:
TableInfo{name='user_table', columns={batchName=Column{name='batchName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, centerID=Column{name='centerID', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, adminType=Column{name='adminType', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userName=Column{name='userName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, batchID=Column{name='batchID', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userID=Column{name='userID', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, password=Column{name='password', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, phoneNumber=Column{name='phoneNumber', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, adminID=Column{name='adminID', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, name=Column{name='name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, email=Column{name='email', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userRoleName=Column{name='userRoleName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, centerName=Column{name='centerName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
 Found:
TableInfo{name='user_table', columns={batchName=Column{name='batchName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, centerID=Column{name='centerID', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, adminType=Column{name='adminType', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userName=Column{name='userName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, batchID=Column{name='batchID', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userID=Column{name='userID', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, password=Column{name='password', type='Text', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, phoneNumber=Column{name='phoneNumber', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, adminID=Column{name='adminID', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, name=Column{name='name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, email=Column{name='email', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, userRoleName=Column{name='userRoleName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, centerName=Column{name='centerName', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
    at androidx.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:103)
    at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onUpgrade(FrameworkSQLiteOpenHelper.java:124)

В базе данных уже есть некоторые данные.

1 Ответ

2 голосов
/ 06 ноября 2019

Вы должны установить пароль nullable в модели объекта или указать ненулевое значение во время миграции. Попробуйте установить

Либо

val password:String?

Или

ALTER TABLE user_table ADD COLUMN password TEXT NOT NULL DEFAULT ''

NB: Заменить пустымс вашим значением по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...