栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

数据库导入和导出在Android Pie中不起作用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据库导入和导出在Android Pie中不起作用

在Android Pie +中,SQLite已更改为默认设置,以使用通常更有效的预写日志记录( WAL )代替日记模式。

这样,将有两个与数据库同名的文件,但后缀为 -shm (共享内存文件)和 -wal
写日志),我认为它们的存在是导致此问题的原因。
SQLite使用的临时文件(请参阅2.2和2.3)

一种解决方法是使用SQliteDatabase disableWriteAheadLogging
方法禁用预写日志记录,而先前的方法将像以前一样工作,但日志效率较低。

  • (如果使用 SQliteOpenHelper 的子类,则重写 onConfigure 方法以调用此方法。)disableWriteAheadLogging。

另一个修复方法是在还原时删除这两个文件。为了避免潜在的损坏,必须在进行备份之前确保对数据库进行适当的检查。见PRAGMA检查站;

以下是还原时删除这两个文件的摘要(请注意,假定已使用足够的检查点进行了备份):

         // Added for Android 9+ to delete shm and wal file if they exist         File dbshm = new File(dbfile.getPath() + "-shm");         File dbwal = new File(dbfile.getPath()+ "-wal");         if (dbshm.exists()) {  dbshm.delete();         }         if (dbwal.exists()) {  dbwal.delete();         }

另一个解决方法是另外备份并随后还原-shm和-wal文件。

您可能还希望考虑在导入/还原时重命名原始文件,在复制新文件后检查新文件的潜在好处(例如,使用 PRAGMA
integrity_check;),如果结果表明没有问题,则删除重命名的原始文件,否则删除导入的文件并将原始文件重命名为其原始名称,表明导入失败。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507528.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号