Kotlin Andoid预生产数据库

问题描述

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

我建立了一个实体:

@Entity(tableName =“ scores”)数据类DBscore( @首要的关键 var pseudo:String =“”, var score:Int = 0){

}

//从DB模型到kotlin模型的转换方法很有趣 List.asDomainModel():列表{ 返回地图{ 得分( 伪= it.pseudo, 分数= it.score ) }

}

使用数据库文件的样本值预填充数据库

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

我已经创建了以下数据库文件https://wetransfer.com/downloads/c534dd62136c94f17c0ee71f1ef39a1920201011144837/6ff2b7

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

原因:java.lang.IllegalStateException:预打包的数据库具有无效的架构:scores(com.example.hangmangame.database.entity.DBscore)。 预期: TableInfo {name ='scores',columns = {pseudo = Column {name ='pseudo',type ='TEXT',affinity ='2',notNull = true,primaryKeyPosition = 1,defaultValue ='null'},分数=列{name ='score',type ='INTEGER',affinity ='3',notNull = true,primaryKeyPosition = 0,defaultValue ='null'}},foreignKeys = [],indexs = []} 发现: TableInfo {名称='分数',列= {分数=列{名称='分数',类型='INTEGER',亲和力='3',notNull = false,primaryKeyPosition = 0,defaultValue ='null'},伪=列{name ='pseudo',type ='TEXT',affinity ='2',notNull = true,primaryKeyPosition = 1,defaultValue ='null'}},foreignKeys = [],indexs = []}

似乎是列顺序的问题,但对我而言,sql对它并不敏感。

寻求帮助。

致谢

昆汀。

解决方法

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