【问题标题】: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 抛出。

预期:

 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]}]}

有什么帮助吗?

【问题讨论】:

    标签: android sqlite android-room


    【解决方案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?
      )

      【讨论】:

        猜你喜欢
        • 2021-05-10
        • 1970-01-01
        • 2020-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-22
        • 1970-01-01
        • 2021-03-02
        相关资源
        最近更新 更多