db3数据库打开(db3 数据库)

db3数据库打开(db3 数据库)1 数据库在沙箱内位置 沙箱文件目录 官方文档说明 https gitee com openharmony docs blob master zh cn application dev file management app sandbox directory md 获取数据库路径 let 数据库路径 data storage el2 database entry rdb Mydata db 2 数据库临时文件 找到了数据库 db 文件 只导出这个 db 文件是没有用的



1.数据库在沙箱内位置

沙箱文件目录 官方文档说明

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/file-management/app-sandbox-directory.md

获取数据库路径:

let 数据库路径='/data/storage/el2/database/entry/rdb/Mydata.db'

2.数据库临时文件

找到了数据库db文件,只导出这个db文件是没有用的。因为还有db-wal这个临时文件。系统并没有把数据全部写入db,甚至重启手机也不行。

3.备份数据库

ArkTs提供了关系数据库的备份功能,能够将所有数据备份到备份数据库中,这样就可以曲线救国了。

  /*

   * 数据库备份

   */

  备份(){

    this.数据库.backup('备份Mydata.db')

  }

 

  /*

   * 数据库恢复

   */

  恢复(){

    this.数据库.restore('备份Mydata.db')

  }

4.导出沙箱文件到用户文件夹

import RDB from 'https://www.bilibili.com/RDB' //自己编写的数据库模块

import picker from '@ohos.file.picker'; //用于打开文件选择器

import fs from '@ohos.file.fs'; //文件拷贝用

 

@Entry

@Component

struct 获取文件{

 

  async 导出(){

    RDB.备份() //先进行备份获得全部数据,文件名固定为'备份Mydata.db'

 

    try {

      let 数据库文件='/data/storage/el2/database/entry/rdb/备份Mydata.db'

      

      //用文件选择器选择用户区目录和文件名进行保存

      let 文件保存选项= new picker.DocumentSaveOptions();

      

      //写好默认的文件名,如果存在同名文件,系统拷贝时会自动重命名

      文件保存选项.newFileNames = ['备份Mydata.db'];

 

      let 文件选择器= new picker.DocumentViewPicker();

      文件选择器.save(文件保存选项).then((保存文件结果: Array

 

        let 目标uri=保存文件结果[0]

 

        let 目标文件=fs.openSync(目标uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)

 

        fs.copyFile(数据库文件,目标文件.fd,).then(()=>{

          //拷贝成功后关闭文件

          fs.closeSync(目标文件.fd) 

        }).catch((err)=>{

          console.error('xxx','拷贝文件失败: ' , err.message , err.code)

        })

 

      }).catch((err) => {

        console.error('xxx','DocumentViewPicker.save错误: ' + JSON.stringify(err));

      });

    } catch (error) {

      let err = error;

      console.error('xxx','DocumentViewPicker错误: ' + JSON.stringify(err));

    }

  }

}

5.导入数据库

  async 导入(){

 

    try {

      //不管从文件选择器中选择的文件名是什么,拷贝过来都固定为'备份Mydata.db'

      let 目标文件='/data/storage/el2/database/entry/rdb/备份Mydata.db'

 

      let 文件打开选项 = new picker.DocumentSelectOptions()

      let 文件选择器 = new picker.DocumentViewPicker();

      文件选择器.select(文件打开选项).then((选择文件: Array

        let 来源uri=选择文件[0]

 

        let 来源文件=fs.openSync(来源uri, fs.OpenMode.READ_ONLY)

 

        fs.copyFile(来源文件.fd,目标文件).then(()=>{

          fs.closeSync(来源文件.fd)

 

          //从导入的文件'备份Mydata.db'恢复到数据库文件Mydata.db

          RDB.恢复()

        }).catch((err)=>{

          console.error('xxx','导入文件失败: ' + err.message + ', error code: ' + err.code)

        })

 

      }).catch((err) => {

        console.error('xxx','DocumentViewPicker.select错误: ' + JSON.stringify(err));

      });

    } catch (error) {

      let err = error;

      console.error('xxx','DocumentViewPicker错误: ' + JSON.stringify(err));

    }

  }

编程小号
上一篇 2025-03-18 07:21
下一篇 2025-02-23 15:57

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/22920.html