首页 > 数据库 >【鸿蒙ArkTs】沙箱内sqlite数据库db文件导入导出

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

时间:2024-03-14 19:32:54浏览次数:25  
标签:文件 ArkTs err 数据库 db let 沙箱 备份

1.数据库在沙箱内位置

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

获取数据库路径:

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 '../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 DocumentSaveOptions = new picker.DocumentSaveOptions();
      DocumentSaveOptions.newFileNames = ['备份Mydata.db'];
      let documentPicker = new picker.DocumentViewPicker();
      documentPicker.save(DocumentSaveOptions).then((DocumentSaveResult: Array<string>) => {
        let 目标uri=DocumentSaveResult[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<string>) => {
        let 来源uri=选择文件[0]

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

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

          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));
    }
  }

标签:文件,ArkTs,err,数据库,db,let,沙箱,备份
From: https://blog.csdn.net/m0_55312387/article/details/136716448

相关文章

  • CF436E - Cardboard Box 题解
    只讲贪心做法。一、反悔贪心考虑如何使选的星星总数多一。显然,有如下几种方式:选一个之前没选过的位置\(i\),答案加上\(a_i\)。选一个之前选过一次的位置\(i\),答案加上\(b_i-a_i\)。对于一个之前选过一次的位置\(i\),再找到一个没有选过的位置\(j\),反悔掉\(i\),并选......
  • zabbix监控MogDB-openGauss之采集prometheus数据
    zabbix监控MogDB/openGauss之采集prometheus数据本文出处:https://www.modb.pro/db/187462前言市场上比较的监控方式有两种:zabbix和prometheus架构,对于MogDB/openGauss数据库来说,已经通过grafana+prometheus+opengauss_exporter的方式完成了监控部署,如何通过zabb......
  • 配置MogDB openGauss的grafana 的dashboard
    配置MogDB/openGauss的grafana的dashboard本文出处:https://www.modb.pro/db/188684概述我们已经介绍了prometheus+grafana+opengauss_exporter完成对MogDB/openGauss数据库的监控,但这只是第一步,我们还需要通过grafana的dashboard查看各个关注的指标项,本文主要......
  • CMDB在IT管理中的重要性
    ConfigurationManagementDatabase(CMDB)即配置管理数据库,在当前企业的IT运维管理中扮演着重要的角色。CMDB是一个包含了企业所有设备、软件和服务配置信息的中心数据库,通过有效地管理这些配置数据,能够为企业提供全面的、动态更新的IT基础设施信息。 CMDB对IT人员提供了统一、......
  • 利用jmeter命令行模式对influxdb查询api进行压力测试
    需求说明物联网指标数据(车辆的轨迹、里程、速度等)存储在influxDB中。需要对指标查询服务的性能做压力测试。背景1、javaservice已经对influxDB查询sql做了封装,api参数如下:{"deviceIds":["14146284645"],"startTime":1710259200000,"endTime":17104320......
  • 【Unity】Transform、Rigidbody、CharacterController移动
    前言在使用Unity开发的时候,移动是最最基础的一个需求,我来给大家简单的讲一下Unity中的几种常见的移动方法。1.Transform移动Transform移动就是修改物体的position①修改位置这里要注意:坐标分为世界坐标和本地坐标//将物体的世界坐标修改为(1,1,1)transform.posit......
  • 使用docker搭建mongodb
    使用DockerCLI搭建MongoDB1.运行MongoDB容器首先,我们使用以下命令来启动一个MongoDB容器:dockerrun-itd--namemongodb_comm-v$PWD/data:/data/db-p27017:27017mongo:4.4--auth参数解释:-itd:这三个参数通常一起使用,i表示交互式模式,t分配一个伪......
  • HarmonyOS 鸿蒙 arkts 自定义组件插槽
    HarmonyOS鸿蒙arkts中自定义组件中要传入其他组件的时候就可以使用自定义组件插槽。Container组件添加child属性后,表示该组件具备了额外添加子组件的能力,接下来在需要添加子组件的地方使用child属性做占位即可。自定义组件@ComponentexportstructContainer{@Bu......
  • 实例带你了解GaussDB的索引管理
    本文分享自华为云社区《GaussDB数据库的索引管理》,作者:Gauss松鼠会小助手2。一、引言GaussDB数据库是华为公司倾力打造的自研企业级分布式关系型数据库,索引的设计和管理对于提高查询性能至关重要。下面将通过实际例子深入研究GaussDB数据库的索引管理。二、GaussDB数据库中的......
  • MogDB openGauss 角色切换后sequence为什么不连续
    本文出处:https://www.modb.pro/db/569272背景今天在客户现场做高可用切换测试,为了验证数据库节点角色切换后无数据丢失,我单独创建一张使用了自增sequence的表,通过vip方式访问数据库,并1s插入一条数据。因为数据库本身是通过benchmarksql工具加压的,数据库服务器的CPU使......