我的应用程序中需要一个预填充的数据库。Room正确创建数据库;但是当我尝试与它互动时;该应用程序因Pre-packaged database has an invalid schema
错误而崩溃。生成的文件 (from data/data/com.myapp/databases/
) 文件夹的架构似乎没问题。我正在使用 DB Browser Lite 来直观地创建我的数据库。
MESSAGE -- Pre-packaged database has an invalid schema: EnglishMarathi(com.myapp.data.EnglishMarathi).
Expected:
TableInfo{name='EnglishMarathi', columns={id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, word=Column{name='word', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, meaning3=Column{name='meaning3', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, meaning2=Column{name='meaning2', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, meaning1=Column{name='meaning1', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
Found:
TableInfo{name='EnglishMarathi', columns={englishTyped=Column{name='englishTyped', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, id=Column{name='id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, word=Column{name='word', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, meaning3=Column{name='meaning3', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, meaning2=Column{name='meaning2', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, meaning1=Column{name='meaning1', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
CAUSE -- null
TRACE -- [Ljava.lang.StackTraceElement;@450ced0
我尝试从 schema.json sql 脚本从头开始创建一个小型数据库文件。问题仍然存在。
{...
"tableName": "MarathiEnglish",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `word` TEXT NOT NULL, `meaning1` TEXT NOT NULL, `meaning2` TEXT, `meaning3` TEXT, `englishTyped` TEXT, PRIMARY KEY(`id`))",
...}
在 Room 中,@Entity 类定义/确定 Room 期望的表。
根据消息,您的问题是实体不包括预填充数据库中的englishTyped列。
所以你需要要么
val englishTyped: String
或我尝试从 schema.json sql 脚本从头开始创建一个小型数据库文件。问题仍然存在。
更简单的方法是
Java (generated)
在项目资源管理器窗口中找到并展开。createAllTables
,可以将表的EXPECTED SQL 复制并粘贴到数据库浏览器中。例子
假设您的 EnglishMarathi 课程为:-
@Entity
data class EnglishMarathi(
@PrimaryKey
val id: Long,
@NonNull
val word: String,
val meaning1: String,
val meaning2: String?,
val meaning3: String?,
val englishTyped: String
)
并且您的 @Database 注释类是TheDatabase,然后在编译项目后:-
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句