База данных помещения. У предварительно упакованной базы данных неверная схема - PullRequest
0 голосов
/ 06 февраля 2020

У меня проблема с базой данных пре-пакетов. У меня есть база данных на внешнем хранилище. Я скопировал эту базу данных для размещения в каталоге базы данных. После копирования базы данных мне следует использовать базу данных Room, но, к сожалению, java.lang.IllegalStateException Pre-packaged database has an invalid schema брошено.

Ожидается:

 TableInfo{name='glyphs', columns={max_x=Column{name='max_x', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, glyph_id=Column{name='glyph_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, page_number=Column{name='page_number', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, max_y=Column{name='max_y', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, line_number=Column{name='line_number', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, sura_number=Column{name='sura_number', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, ayah_number=Column{name='ayah_number', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, min_x=Column{name='min_x', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, position=Column{name='position', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, min_y=Column{name='min_y', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}

Найдено:

TableInfo{name='glyphs', columns={max_x=Column{name='max_x', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, glyph_id=Column{name='glyph_id', type='int', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, page_number=Column{name='page_number', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, max_y=Column{name='max_y', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, line_number=Column{name='line_number', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, sura_number=Column{name='sura_number', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, ayah_number=Column{name='ayah_number', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, min_x=Column{name='min_x', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, position=Column{name='position', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, min_y=Column{name='min_y', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='sura_ayah_idx', unique=false, columns=[sura_number, ayah_number]}, Index{name='page_idx', unique=false, columns=[page_number]}]}

Помогите, пожалуйста?

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Я выяснил проблему. Индексы схемы отсутствовали. Я добавил индексы в класс @Entity, и он работает нормально.

Индекс в базе данных используется для ускорения запросов, для получения более подробной информации обратитесь к официальной документации

Пример индексов в базе данных комнат

@Entity(indices = arrayOf(Index(value = ["last_name", "address"])))
data class User(
    @PrimaryKey val id: Int,
    val firstName: String?,
    val address: String?,
    @ColumnInfo(name = "last_name") val lastName: String?,
    @Ignore val picture: Bitmap?
)
0 голосов
/ 06 февраля 2020

Похоже, ваш экспорт не поддерживает типы столбцов, поддерживаемые Room. Судя по схеме, которой вы поделились, Room ожидает INTEGER вместо int. Вы должны попытаться придерживаться типов данных, ожидаемых SQLite, как указано здесь: https://www.sqlite.org/datatype3.html

...