HarmonyOS 鸿蒙Next数据库文件
HarmonyOS 鸿蒙Next数据库文件 为什么看到的仿真手机沙箱目录里的数据库文件大小正常,但仿真手机判断到的表记录数却为零;保存到硬盘后用DB Browser (SQLite)也读不到表的记录?
尊敬的开发者,您好,
本地参考如何使用公共目录下的数据库文件文档中的示例在DevEco Studio 6.1.1 Release、API 23设备上运行未复现您的问题,为了尽快解决您的问题,需要您进一步提供如下信息:
- 是否可以提供您的设备版本及DevEco Studio版本信息;
- 是否可以提供下您这边保存数据库文件的简单demo;
- 是否可以提供具体的日志信息以便分析:
日志获取:
步骤一:先清理日志
- hdc shell
- cd data/log/hilog
- hilog -w clear (清除多余日志)
- exit 退回到目录
二、复现问题
三、使用命令hdc file recv /data/log/hilog 导出hilog
更多关于HarmonyOS 鸿蒙Next数据库文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
如果在 SQLite 事务未提交问题。在鸿蒙模拟器(或任何 SQLite 环境)中,数据写入后如果未执行 COMMIT,会出现以下现象:事务未提交 会导致描述问题。检查你的代码是否在每个 beginTransaction() 后都有对应的 commit(),特别是异步操作中的异常处理路径。
其他可能导致原因:
- WAL 模式导致文件分离
- 连接池隔离问题
- 模拟器文件同步延迟,
期待解决,
总的来说,HarmonyOS是一款非常优秀的操作系统,期待它能在未来带给我们更多惊喜!
小鹿:您好,谢谢您的回答。我导出内容是包含 .db、.db-wal和 .db-shm三个文件,并且各文件的大小与正常时的文件大小一样。不知为啥会出现问题?
Mandelx: 您好,谢谢您的回答。我碰到的问题是我在代码中通过fs.writeSync(file.fd, dataBuffer.buffer)把数据库文件从rawfile目录拷到仿真机的沙箱目录,有时候应用能正常调用数据库的表,有时候则出现resultSet1.rowCount =0这中情况,不知到是哪里存在问题?
鸿蒙Next数据库文件默认存储在应用沙箱目录下的/data/app/el2/100/database/<包名>/中,使用系统自带RDB(关系型数据库)管理,文件后缀为.db。可通过getDatabasePath或context.databaseDir获取路径。
常见原因是数据库启用了 WAL(预写日志)模式 或 加密存储。
HarmonyOS 的 RelationalStore 可能默认使用 WAL 模式,数据先写入同目录下的 *.db-wal 文件,尚未合并(checkpoint)到主库 *.db 文件。你看到的 .db 文件大小正常,但表记录为 0,是因为记录还在 -wal 文件里。只复制主库文件到硬盘,或用 DB Browser 打开,都会丢失这部分数据。
另外,若应用创建数据库时启用了加密,则 .db 文件内容为密文,第三方工具无法解析,同样会显示 0 条记录。需要检查沙箱目录下是否有 -wal/-shm 文件,或确认应用是否设置了加密参数。



