房间数据库 预打包的数据库的架构无效
Posted
技术标签:
【中文标题】房间数据库 预打包的数据库的架构无效【英文标题】:Room database Pre-packaged database has an invalid schema 【发布时间】:2020-02-06 13:18:45 【问题描述】:我的预打包房间数据库有问题。
我在外部存储上找到了一个数据库。我已复制此数据库以放置在数据库目录中。
复制数据库后,我应该使用Room数据库,但不幸的是,
java.lang.IllegalStateException Pre-packaged database has an invalid schema
抛出。
预期:
TableInfoname='glyphs', columns=max_x=Columnname='max_x', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', glyph_id=Columnname='glyph_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null', page_number=Columnname='page_number', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', max_y=Columnname='max_y', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', line_number=Columnname='line_number', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', sura_number=Columnname='sura_number', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', ayah_number=Columnname='ayah_number', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', min_x=Columnname='min_x', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', position=Columnname='position', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', min_y=Columnname='min_y', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', foreignKeys=[], indices=[]
找到:
TableInfoname='glyphs', columns=max_x=Columnname='max_x', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', glyph_id=Columnname='glyph_id', type='int', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null', page_number=Columnname='page_number', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', max_y=Columnname='max_y', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', line_number=Columnname='line_number', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', sura_number=Columnname='sura_number', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', ayah_number=Columnname='ayah_number', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', min_x=Columnname='min_x', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', position=Columnname='position', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', min_y=Columnname='min_y', type='int', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null', foreignKeys=[], indices=[Indexname='sura_ayah_idx', unique=false, columns=[sura_number, ayah_number], Indexname='page_idx', unique=false, columns=[page_number]]
有什么帮助吗?
【问题讨论】:
【参考方案1】:您的导出内容似乎没有 Room 支持的列类型。 从您共享的架构的外观来看,Room 期待 INTEGER 而不是“int”。您应该尝试并坚持使用 SQLite 所期望的数据类型,如此处所述: https://www.sqlite.org/datatype3.html
【讨论】:
【参考方案2】:我发现了问题。 该计划的指标缺失。我已将索引添加到 @Entity 类,它工作正常。
数据库中的索引用于加速查询,检查official documentation for more details
Room 数据库中的索引示例
@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?
)
【讨论】:
以上是关于房间数据库 预打包的数据库的架构无效的主要内容,如果未能解决你的问题,请参考以下文章