鸿蒙HarmonyOS数据存储简述笔记

打印 上一主题 下一主题

主题 848|帖子 848|积分 2544

数据存储

概述

存储

存储方式

数据存储指的是应用将数据存储在外存上,实现数据长期化生存。在Harmony应用中,数据存储方式支持本地数据存储分布式存储


  • 本地存储
本地存储是把应用数据存储在本地。


  • 分布式存储
分布式存储是把应用的数据分布存储在多个设备上,应用可以在多个设备之间将举行数据的共享和同步等。
存储选择

HarmonyOS支持文件存储,并在此底子上提供了基于文件的首选项数据存储接口,首选项数据以键-值对的方式举行存储,适合少量数据存储。
HarmonyOS底层采取SQLite数据库管理系统作为长期化存储引擎,为应用提供关系数据存储,关系数据存储适合大量的结构化数据。
首选项数据存储

概念:
基于键值对存储,Key是不重复的关键字,Value是数据值,为非关系数据库
束缚限制:


  • Key为string类型,要求非空且长度不超过80个字节
  • 存储的数据量应是轻量级的
特点:


  • 访问速度快
  • 存取效率高
  • 存储量小
适用范围


  • 登录账号、暗码
  • 配置信息
  • 相关存储量小的数据
存取位置:
操作系统的文件中
访问机制:
每个底层文件对应一个Prefences实例,应用在获取指定文件对应的Prefence实例后,可以借助Prefences提供的接口方法举行读写数据,Prefences与底层文件交互。
实际操作:
  1. //导入用户首选项模块,导入后获得一个用户首选项实例
  2. import { prefences } from '@kit.ArkData';
  3. const PREFERENCES_NAME = 'myprefences';                //定义一个myPrefencces实例数据名
  4. const KEY_APP_FONT_SIZE = 'appFontSize';        //定义一个常量保存数据的关键字
  5. let prefence =
复制代码
步骤


  • 导入首选项模块
  1. import dataPrefence from '@ohos.data.preferences'
复制代码

  • 获取首选项实例,读取指定文件
  1. //this.context是UIAbilityContext,MyAppPreferences是Preferences实例对象
  2. dataPrefence.getPreferences(this.context,'MyAppPreferences')
  3.         .then(preferences => {
  4.     //获取成功
  5.         })
  6.         .catch(reason => {
  7.     //获取失败
  8.         })
复制代码
函数签名:getPreferences函数接受三个参数——一个Context对象(代表应用步伐或本领的上下文),一个字符串(表示偏好设置文件的名称),以及一个AsyncCallback<references>回调函数(当偏好设置实例可用时会被调用)。
  1. function getPreferences(context: Context, name: string, callback: AsyncCallback<Preferences>): void;
复制代码

  • 数据操作
  1. //写入数据,如果已经存在则会覆盖,可以用.has()判断是否存在
  2. preferences.put('ker',val)
  3.         .then(() => preferences.flush()) //刷到磁盘
  4.         .catch(reason => {})         //处理异常
  5. //删除数据
  6. preferences.delete('key')
  7. .then(() => {}).catch(reason => {})
  8. //查询数据
  9. preferences.get('key','defaultValue')
  10.         .then(value => console.log('查询成功'))
  11.         .catch(reason => console.log('查询失败'))
复制代码
关系数据库存储

概念
关系数据库(RDB)时基于关系模子构造管理数据的数据库
RDB中一般包罗若干个二维的数据表,每个表以行和列的形式存储数据。HarmonyOS关系数据存储底层利用SQLite作为长期化存储引擎。
利用关系数据存储框架提供了一系列可以操作关系数据库的应用步伐接口。在基于ArkTS的开发中,这些接口定义在ohos.data.rdb包中,因此利用时需要导入该包:
  1. //过时接口
  2. import data_rdb from '@ohos.data.rdb'
复制代码
异步回调

异步回调
​ 有的时候,我们不希望步伐在某个执行方法上不绝阻塞,需要先执行后续的方法,那就是这里的异步回调。我们在调用一个方法时,假如执行时间比较长,我们可以传入一个回调的方法,当方法执行完时,让被调用者执行给定的回调方法。
async和await



  • async:async是“异步”的简写,用于声明一个函数是异步的。当一个函数被async修饰后,该函数会隐式地返回一个Promise对象。这意味着,纵然函数内部没有显式地返回Promise,它也会返回一个已解决的Promise(假如函数正常竣事)或已拒绝的Promise(假如函数抛出异常)。
  • await:await可以看作是async wait的简写,用于等待一个异步方法执行完成。await只能在async函数内部利用,它会暂停async函数的执行,直到等待的Promise被解决(resolve)或拒绝(reject),然后继承执行async函数并返回解决的值或抛出异常。
关系型数据库存储

关系型数据库(RDB)是基于SQLite组件提供的本地数据库,用于管理应用中的结构化数据。比方:记账本、备忘录。


  • 导入关系型数据库模块
  1. //import relationalStore from '@ohos.data.relationalStore';
  2. import {relationalStore, ValuesBucket } from '@kit.ArkData'
复制代码

  • 初始化数据库表
  1. //2.1.rdb配置
  2. const config = {
  3.     name:'MyApplication.db',//数据库文件名
  4.     securityLevel: relationalStore.SecurityLevel.S1 //数据库安全级别
  5. }
  6. //2.2.初始化表的SQL
  7. const sql = `CREATE TABLE IF NOT EXISTS TASK (
  8.                                 ID INTEGER PRIMARY KEY,
  9.                                 NAME TEXT NOT NULL,
  10.                                 FINISHED bit
  11.                                 )`
  12. //2.3.获取rdb
  13. relationalStore.getRdbStore(this.context, config, (err,rdbStore) =>{
  14.     //2.4.执行Sql,后续大的是所有增删改查都是使用rdbStore对象
  15.     rdbStore.executeSql(sql)
  16. })
复制代码
增删改查:

  • 新增数据
  1. //1.1.准备数据
  2. let task = {id: 1,name: '任务1', finished: flase};
  3. //1.2.新增
  4. this.rdbStore.insert(this.tableName,task) //(表名,数据对象)
复制代码

  • 修改数据
  1. //2.1.要更新的数据
  2. let task = {'finished': true}
  3. //2.2.查询条件,RdbPredicates就是条件谓词
  4. let predicates = new relationalStore.RdbPredicates(this.tableName)//this.tableName为表名
  5. //2.3.执行更新
  6. this.rdbStore.update(task,predicates)
复制代码

  • 删除
  1. //3.1.查询条件
  2. let predicates = new ralationalStore.RdbPredicates(this.tableName)
  3. //3.2.执行删除
  4. this.rdbStore.delete(predicates)
复制代码

  • 查询
4.1.查询数据
  1. //1.1.查询条件
  2. let predicates = new ralationalStore.RdbPredicates(this.tableName)
  3. //1.2.执行查询
  4. let result await this.rdbStore.query(predicates, ['ID','NAME',FINISHED])
复制代码
4.2.解析结果
  1. //2.1.准备数据保存结果s
  2. let tasks: any[] = []
  3. //2.2.循环遍历结果集,判断是否结果遍历到最后一行
  4. while (!result.isAtLastRow) {
  5.     //指针移动到下一行数据
  6.     result.goToMextRow()
  7.     //根据字段名获取字段index,从而获取字段值
  8.     let id = result.getLong(result.getColumnIndex('ID'))
  9.     let name = result.getString(result.getColumnIndex('NAME'))
  10.     tasks.push({id, name})
  11. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

三尺非寒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表