在测试中本地存储数据库经常会因版本产生较大迭代,不得不进行调整修改数据存储结构,更改字段,这样的修改常引起覆盖安装后本地数据的显示问题。
1.最新项目消息版本在一次迭代版本中,app的本地数据库结构因需求的新增需修改数据存储结构。导致新版本数据库结构和低版本不同。一般会出现用户升级后本地存储的下载文件、聊天记录出现不显示或丢失异常。
2.为了避免异常发生,需要弄清楚新版本数据库结构发生了哪些变化不同于旧版本。
3.把旧版本app生成的db文件、新版本生成额db文件pull一份到pc上,使用sqlite database browser工具查看数据结构
4.在客户端生产所有类型数据,重点跟修改相关的数据。然后使用新版覆盖旧版,读取所有本地数据,检查是否完整正常显示。
今天在Android中将sqlite的数据库文件生成在SD卡上的过程中,发现生成的.db文件的旁边生,成了一个大小为0的与数据库文件同名的.db-journal文件。不明白此文件的用途,于是google了sqlite的官方文档,发现该文件的用途如下:
该文件是sqlite的一个临时的日志文件,主要用于sqlite事务回滚机制,在事务开始时产生。
在事务结束时删除。当程序发生崩溃或者系统断电时该文件将留在磁盘上,以便下次程序运行时进行事务回滚。
但是我创建数据库时将事务结束了,同时程序也没有崩溃,为什么还是会在磁盘上产生.db-journal文件呢?
深入研究,发现这是sqlite生成日志文件的不同模式造成的。
在android采用的这种模式下,.db-journal文件是永久的留在磁盘上不会被自动清除的。如果没有发生事务回滚那么.db-journal文件的大小为0,这样就避免了每次生成和删除.db-journal文件的开销。