Итак, я использовал базу данных SQLite и решил перенести ее в Room, не меняя ее. Вот так выглядит моя модель комнаты
@Entity(tableName = "documents")
data class Document(
@PrimaryKey(autoGenerate = true)
val docID: Int,
val path: String,
val filename: String,
val dateCreated: Long = MAX_VALUE,
)
, и этот запрос я использовал для создания таблицы ДО комнаты:
"CREATE TABLE IF NOT EXISTS documents (docID INTEGER PRIMARY KEY ASC, path TEXT NOT NULL unique, filename TEXT NOT NULL, dateCreated LONG DEFAULT MAX_VALUE)"
также я создал новую миграцию наокончательная версия базы данных, которая использует комнату, которую я оставил пустой, потому что я не хочу ничего менять в таблице.
private val MIGRATION_9_10: Migration = object : Migration(9, 10) {
override fun migrate(database: SupportSQLiteDatabase) {
}
}
так, когда я наконец запустил ее на устройстве, на котором было предыдущее(9) версия базы данных, выдается исключение:
java.lang.IllegalStateException: Migration didn't properly handle: documents.
Expected: TableInfo{name='documents', columns={path=Column{name='path', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, filename=Column{name='filename', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, dataCreated=Column{name='dataCreated', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, docID=Column{name='docID', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}}, foreignKeys=[], indices=[]}
Found: TableInfo{name='documents', columns={path=Column{name='path', type='STRING', affinity='1', notNull=true, primaryKeyPosition=0, defaultValue='null'}, filename=Column{name='filename', type='STRING', affinity='1', notNull=true, primaryKeyPosition=0, defaultValue='null'}, dataCreated=Column{name='dataCreated', type='LONG', affinity='1', notNull=false, primaryKeyPosition=0, defaultValue='9223372036854775807'}, docID=Column{name='docID', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}}, foreignKeys=[], indices=[]}
существуют различия между типами полей пути и имени файла, которые, как ожидается, будут TEXT , но на самом деле это STRING , а также тип dateCreated, который, как ожидается, будет INTEGER , но на самом деле LONG . Интересная часть для меня - то, что dateCreated имел тип задолго до этого и все еще имеет тип long. Я попытался добавить миграцию, которая выглядит следующим образом:
private val MIGRATION_9_10: Migration = object : Migration(9, 10) {
override fun migrate(database: SupportSQLiteDatabase) {
val tableDocumentsTemp = "documents_temp"
database.execSQL("ALTER TABLE documents RENAME TO $tableDocumentsTemp")
database.execSQL("CREATE TABLE documents (docId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, path STRING NOT NULL, filename STRING NOT NULL, dateCreated LONG DEFAULT $MAX_VALUE)")
database.execSQL("INSERT INTO documents (docId, path, filename, dateCreated) SELECT docId, path, filename, dateCreated FROM $tableDocumentsTemp")
database.execSQL("DROP TABLE $tableDocumentsTemp")
}
}
}
, но это не имеет значения.
У кого-нибудь есть идеи, как я могу это исправить?