Kotlin android 预填充数据库

Posted

技术标签:

【中文标题】Kotlin android 预填充数据库【英文标题】:Kotlin andoid pre poluate data base 【发布时间】:2021-01-26 00:46:49 【问题描述】:

我正在尝试构建一个非常简单的数据库来存储 Hangman 游戏的分数。

我建立了一个实体:

@Entity(tableName = "scores") 数据类 DBScore( @首要的关键 var 伪: 字符串 = "", var score: Int = 0 )

//从DB模型到kotlin模型的转换方法 fun List.asDomainModel(): 列表 返回地图 分数( 伪 = it.伪, 分数 = it.score )

使用 db 文件用样本值预填充 db

 INSTANCE = databaseBuilder(
                    context.applicationContext,
                    AppDataBase::class.java,
                    "app_database"
                )
                    .createFromAsset("database/scores.db").build()

为此,我创建了以下 db 文件:https://wetransfer.com/downloads/c534dd62136c94f17c0ee71f1ef39a1920201011144837/6ff2b7

但我收到一个错误,不明白我的数据库出了什么问题:

原因:java.lang.IllegalStateException:预打包的数据库具有无效的架构:scores(com.example.hangmangame.database.entity.DBScore)。 预期的: TableInfoname='scores', columns=pseudo=Columnname='pseudo', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=1, defaultValue='null', score=列name='score',type='INTEGER',affinity='3',notNull=true,primaryKeyPosition=0,defaultValue='null',foreignKeys=[],indices=[] 成立: TableInfoname='scores', columns=score=Columnname='score', type='INTEGER', affinity='3', notNull=false, primaryKeyPosition=0, defaultValue='null', pseudo=列name='pseudo', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=1, defaultValue='null', foreignKeys=[], indices=[]

似乎是列顺序的问题,但对我来说 SQL 对它不敏感。

感谢任何帮助。

问候

昆汀。

【问题讨论】:

【参考方案1】:

Room 期望 scoreNOT NULL。显然,基于错误,您预先填充的数据库架构将其命名为 NULL

【讨论】:

谢谢你的回答我没看到。我试图在 sqlite 中更改它,但我仍然有同样的错误。 wetransfer.com/downloads/…看来我的修改没有考虑到AS 它工作得很好,只需要先卸载应用程序才能将修改考虑在内。

以上是关于Kotlin android 预填充数据库的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 sqldelight 从本地资源加载预填充的数据库

带有更新的预填充数据库的 Android Room 迁移

在 Phonegap iOS 应用程序中使用预填充数据库

Kivy 使用预填充的联系人字段启动 android 意图

如何交付带有预填充领域数据库的应用程序

从预填充的数据库中读取数据时出错