鸿蒙应用本地数据库导出与查看指南

鸿蒙应用本地数据库导出与查看指南

一、导出方法(推荐3种)

方法1:DevEco Studio可视化导出(开发调试首选)

  1. 在IDE右侧打开 Device File Browser

  2. 导航至数据库路径:/data/storage/el2/database/entry/rdb/

  3. 同时选中以下三个文件:

    • 数据库名.db
    • 数据库名.db-wal
    • 数据库名.db-shm
  4. 右键选择 Save As → 保存到本地文件夹

方法2:使用hdc命令行工具

bash

perl 复制代码
# 连接设备
hdc shell

# 查找数据库路径
find /data -name "数据库名.db"

# 退出shell后导出文件
hdc file recv /沙箱路径/数据库名.db 本地路径
hdc file recv /沙箱路径/数据库名.db-wal 本地路径
hdc file recv /沙箱路径/数据库名.db-shm 本地路径

方法3:代码实现导出(应用内功能)

typescript

javascript 复制代码
import picker from '@ohos.file.picker';

// 备份数据库
async backupDatabase() {
    const dbBackupPath = this.context.databaseDir + '/backup.db';
    await this.rdbStore.backup(dbBackupPath);
    return dbBackupPath;
}

// 导出到用户设备
async exportDatabase() {
    const backupPath = await this.backupDatabase();
    const filePicker = new picker.DocumentViewPicker();
    const targetUri = await filePicker.save({newFileNames: ['backup.db']});
    await fs.copyFile(backupPath, targetUri[0]);
}

二、查看数据库内容

必备条件

  1. 三个文件必须保持在同一目录
  2. 文件名必须保持原始名称
  3. 使用支持WAL模式的工具(推荐SQLiteStudio)

查看步骤(SQLiteStudio)

  1. 下载安装 SQLiteStudio
  2. 打开软件 → Database → Add a database
  3. 选择导出的 .db 文件
  4. 关键设置 :勾选 Use WAL mode (Write-Ahead Logging)
  5. 双击左侧数据库连接 → 展开Tables查看数据表
  6. 右键表名 → Edit table 查看数据

sqlitestudio.pl/images/scre...

三、常见问题解决

问题现象 原因 解决方案
看不到最新数据 WAL文件未正确处理 1. 确认三个文件在同一目录 2. 执行SQL命令:PRAGMA journal_mode=DELETE;
"database disk image is malformed" 文件导出不完整 1. 重新导出三个文件 2. 使用代码备份后导出单个backup.db文件
加密数据库无法打开 缺少密钥 1. 代码中配置加密密钥 2. 在SQLiteStudio中选择SQLCipher标签输入密钥
导出文件权限不足 未声明文件权限 在module.json5中添加: "requestPermissions": [{ "name": "ohos.permission.FILE_ACCESS_PERSISTED" }]

四、高级技巧

命令行查看(需安装SQLite3)

bash

sql 复制代码
sqlite3 数据库名.db

-- 合并WAL文件
PRAGMA wal_checkpoint(FULL);

-- 查看所有表
.tables

-- 查询数据
SELECT * FROM 表名;

导出为JSON(代码实现)

typescript

typescript 复制代码
async exportToJSON(tableName: string) {
    const data = await this.rdbStore.query(`SELECT * FROM ${tableName}`);
    const jsonStr = JSON.stringify(data);
    
    const filePicker = new picker.DocumentViewPicker();
    const uri = await filePicker.save({
        newFileNames: [`${tableName}.json`]
    });
    
    await fs.writeText(uri[0], jsonStr);
}

五、注意事项

  1. 必须同时导出三个文件(.db、.db-wal、.db-shm)
  2. 开发阶段优先使用DevEco Studio导出
相关推荐
HwJack2023 分钟前
HarmonyOS开发全文检索 FTS 小实战:中文分词与聊天记录搜索
全文检索·中文分词·harmonyos
Java的搬运工14 小时前
HarmonyOS ArkUI V2 实战:Schema 驱动表单、2in1 适配与实时通信
harmonyos·arkts·openharmony·harmonyos next·表单校验·arkui v2·2in1
花先锋队长14 小时前
HarmonyOS 7.0正式发布|华为天气空间运镜城市皮肤从4城增至10城
华为·智能手机·harmonyos
贾伟康15 小时前
【口算王|01】HarmonyOS ArkTS 口算题生成实战:按年级、运算类型和难度生成可控题目
算法·harmonyos·arkts·随机生成·口算题
HarmonyOS_SDK18 小时前
基于增强QUIC协议优化弱网下的直播观看体验
harmonyos
安好说AI18 小时前
Flutter 三方库 adaptive_image_picker 的鸿蒙化适配指南:零权限选图、纯 Dart 裁剪与目标大小压缩
flutter·harmonyos
2501_9197490320 小时前
华为鸿蒙免费PDF工具—小羊免费PDF
华为·pdf·harmonyos·鸿蒙
贾伟康1 天前
【口算王|10】HarmonyOS ArkTS 语音报题实战:协调朗读、作答和页面生命周期
生命周期·harmonyos·arkts·语音交互·texttospeech
贾伟康1 天前
【口算王|08】HarmonyOS ArkTS 分类训练实战:让年级与运算分类参数保持一致
harmonyos·arkts·数据建模·路由参数·分类训练
光锥智能1 天前
华为新麒麟芯片、鸿蒙7问世,手机底层竞赛升级
华为·智能手机·harmonyos