sqlite文件pragma user_version在房间中的重要性 treloading .db文件,房间文档中的这句话意味着什么? 注意:自动化房间迁移依赖于生成的数据库模式 对于旧版本和新版本

问题描述 投票:0回答:1
特别是在您尚未使用新版本编号编辑数据库的零件上。

是指什么?也许Google在说我们需要使用外部工具打开SQLite文件并编辑Pragma User_version值?这是必须使房间迁移工作的强制性吗?

是什么意思?

[*如果将[exportSchema]设置为false)]。

[

false

]表示不可能自动迁移。
android kotlin android-jetpack-compose android-room
1个回答
0
投票
这是因为当[

true

]作为软件包的一部分存储时,该架构允许空间查看以前的模式,从而生成代码以更改(迁移)架构(有限制)。

还应注意,该架构在编译时间进行哈希,并存储在一个名为[

ROOM_MASTER_TABLE
]的表中的实际数据库中。

[版本号],这是在编译时传递/生成的。它用于将实际数据库中的[

USER_Version]作为标头的一部分进行比较(标题是文件的第1个字节,[user_version]为4个字节,并且作为整数值访问)。 如果存在不匹配,则数据库中的值应/应低于编译的版本编号,用于确定要进行的迁移。 If in the case of [*exportSchema*] being false (i.e. no Auto Migration) AND falbackToDestructiveMigration has been specified AND there are no migrations to cover the migration then the database is deleted and will be created according to the current schema UNLESS createFromAsset (File) indicates that the database should be copied from the asset/file after which comparison with the expected current schema and version number are undertaken, any根据规则/代码处理差异。

    部分是,当编译版本与User_version发生冲突时,该代码会导致复制的数据库(资产/文件)被视为不正确且可恢复,并通过删除复制的数据库并使用空的(正确的架构)数据库进行操作。
  • 请注意评论询问为什么您希望您编辑/更改资产/文件。例如,如果您添加了一个表,则资产/文件将需要包括新表,否则资产/文件将不正确。同样,版本(资产/文件中的user_version)。
    
必须使房间迁移工作吗?

[*是*]资产/文件必须遵守房间期望的架构明智(表/列等),并且[

user_version

]很重要。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.