当前位置:   article > 正文

【鸿蒙ArkTs】沙箱内sqlite数据库db文件导入导出_鸿蒙云数据库导出

鸿蒙云数据库导出

1.数据库在沙箱内位置

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

获取数据库路径:

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

2.数据库临时文件

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

3.备份数据库

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

  1. /*
  2. * 数据库备份
  3. */
  4. 备份(){
  5. this.数据库.backup('备份Mydata.db')
  6. }
  7. /*
  8. * 数据库恢复
  9. */
  10. 恢复(){
  11. this.数据库.restore('备份Mydata.db')
  12. }

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

  1. import RDB from '../RDB' //自己编写的数据库模块
  2. import picker from '@ohos.file.picker'; //用于打开文件选择器
  3. import fs from '@ohos.file.fs'; //文件拷贝用
  4. @Entry
  5. @Component
  6. struct 获取文件{
  7. async 导出(){
  8. RDB.备份() //先进行备份获得全部数据,文件名固定为'备份Mydata.db'
  9. try {
  10. let 数据库文件='/data/storage/el2/database/entry/rdb/备份Mydata.db'
  11. //用文件选择器选择用户区目录和文件名进行保存
  12. let 文件保存选项= new picker.DocumentSaveOptions();
  13. //写好默认的文件名,如果存在同名文件,系统拷贝时会自动重命名
  14. 文件保存选项.newFileNames = ['备份Mydata.db'];
  15. let 文件选择器= new picker.DocumentViewPicker();
  16. 文件选择器.save(文件保存选项).then((保存文件结果: Array<string>) => {
  17. let 目标uri=保存文件结果[0]
  18. let 目标文件=fs.openSync(目标uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
  19. fs.copyFile(数据库文件,目标文件.fd,).then(()=>{
  20. //拷贝成功后关闭文件
  21. fs.closeSync(目标文件.fd)
  22. }).catch((err)=>{
  23. console.error('xxx','拷贝文件失败: ' , err.message , err.code)
  24. })
  25. }).catch((err) => {
  26. console.error('xxx','DocumentViewPicker.save错误: ' + JSON.stringify(err));
  27. });
  28. } catch (error) {
  29. let err = error;
  30. console.error('xxx','DocumentViewPicker错误: ' + JSON.stringify(err));
  31. }
  32. }
  33. }

5.导入数据库

  1. async 导入(){
  2. try {
  3. //不管从文件选择器中选择的文件名是什么,拷贝过来都固定为'备份Mydata.db'
  4. let 目标文件='/data/storage/el2/database/entry/rdb/备份Mydata.db'
  5. let 文件打开选项 = new picker.DocumentSelectOptions()
  6. let 文件选择器 = new picker.DocumentViewPicker();
  7. 文件选择器.select(文件打开选项).then((选择文件: Array<string>) => {
  8. let 来源uri=选择文件[0]
  9. let 来源文件=fs.openSync(来源uri, fs.OpenMode.READ_ONLY)
  10. fs.copyFile(来源文件.fd,目标文件).then(()=>{
  11. fs.closeSync(来源文件.fd)
  12. //从导入的文件'备份Mydata.db'恢复到数据库文件Mydata.db
  13. RDB.恢复()
  14. }).catch((err)=>{
  15. console.error('xxx','导入文件失败: ' + err.message + ', error code: ' + err.code)
  16. })
  17. }).catch((err) => {
  18. console.error('xxx','DocumentViewPicker.select错误: ' + JSON.stringify(err));
  19. });
  20. } catch (error) {
  21. let err = error;
  22. console.error('xxx','DocumentViewPicker错误: ' + JSON.stringify(err));
  23. }
  24. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/294894
推荐阅读
相关标签
  

闽ICP备14008679号