我的目标是使用Room的新createFromAsset
API从应用程序的assets中加载预加载的数据库。 但是,我注意到如果我的预加载数据库没有room_master_table
中由Room生成的id和标识哈希,那么会抛出“IllegalStateException:Room无法验证数据完整性。”异常。
我尝试使用由Room生成的精确db文件作为预加载的db进行复制,这样可以工作,但我不确定原因。看起来这些数据库版本/ id /哈希在某个地方保存,并且Room针对这些版本对其进行验证。但是我已经尝试删除本地db并卸载应用程序,但仍然遇到相同的异常。
我想知道Room如何在room_master_table
中生成特定的id和哈希,以及它如何验证它们?
room_master_table
。当首次打开数据库时,Room 将验证模式并创建主表以及哈希(如果一切正常)。如果您包含了room_master_table
,那么它将看起来好像数据库已经被 Room 打开,此时 Room 将只比较哈希而不是进行更适当的模式检查。 - DanyBoricuaroom_master_table
,房间都会执行相同的操作。它始终独立于您是否提供room_master_table
调用SELECT identity_hash FROM room_master_table
。然后将返回值(如果不存在则为null
)与编译的哈希进行比较。 - musooffroom_master_table
中的identity_has
是否存在,而不是检查room_master_table
的存在。 - musooff