Android Room數(shù)據(jù)庫版本升級(jí)隨筆
遇到一個(gè)問題是需要更新播放器緩存多條數(shù)據(jù)棚唆,結(jié)果機(jī)器ota升級(jí)播放后打開播放器失敗了,出現(xiàn)runtime exception
看了原因是緩存數(shù)據(jù)是放在數(shù)據(jù)庫中,以前只緩存一條數(shù)據(jù),現(xiàn)在變成了N條,修改了數(shù)據(jù)庫中一個(gè)鍵值史简,如果以前舊的軟件有播放過視頻就會(huì)緩存一條數(shù)據(jù)的數(shù)據(jù)庫,而此時(shí)OTA升級(jí)上的播放器軟件會(huì)使用新的數(shù)據(jù)庫表肛著,Room這邊檢查hash不過就會(huì)報(bào)錯(cuò)
E AndroidRuntime: java.lang.IllegalStateException:
Room cannot verify the data integrity.
Looks like you've changed schema but forgot to update the version number.
You can simply fix this by increasing the version number.
具體原因及修改可以看這個(gè)地方
【android】Room數(shù)據(jù)庫版本升級(jí)圆兵,數(shù)據(jù)遷移詳解 - JavaShuo
如果使用的Room版本更新的話其實(shí)可以使用自動(dòng)的改法
Room 中的數(shù)據(jù)庫自動(dòng)遷移功能 - 騰訊云開發(fā)者社區(qū)-騰訊云
由這個(gè)問題引發(fā)的思考
1、針對(duì)數(shù)據(jù)的修改需要考慮前后版本的兼容枢贿,要增加對(duì)應(yīng)的測(cè)試用例來發(fā)現(xiàn)問題
2殉农、為什么code review 的時(shí)候沒有考慮到第1點(diǎn)呢,第一個(gè)本身平時(shí)對(duì)數(shù)據(jù)庫的使用比較少局荚,所以沒有考慮過這個(gè)會(huì)出問題超凳,另外就是可以擴(kuò)展閱讀技術(shù)類文檔,查漏補(bǔ)缺