鸿蒙HarmonyOS数据存储简述笔记

数据存储

概述

存储

存储方式

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

  • 本地存储

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

  • 分布式存储

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

存储选择

HarmonyOS支持文件存储,并在此基础上提供了基于文件的首选项数据存储接口,首选项数据以键-值对的方式进行存储,适合少量数据存储。

HarmonyOS底层采用SQLite数据库管理系统作为持久化存储引擎,为应用提供关系数据存储,关系数据存储适合大量的结构化数据。

首选项数据存储

概念:

基于键值对存储,Key是不重复的关键字,Value是数据值,为非关系数据库

约束限制:

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

特点:

  • 访问速度快
  • 存取效率高
  • 存储量小

适用范围

  • 登录账号、密码
  • 配置信息
  • 相关存储量小的数据

存取位置:

操作系统的文件中

访问机制:

每个底层文件对应一个Prefences实例,应用在获取指定文件对应的Prefence实例后,可以借助Prefences提供的接口方法进行读写数据,Prefences与底层文件交互。

实际操作:

//导入用户首选项模块,导入后获得一个用户首选项实例
import { prefences } from '@kit.ArkData';

const PREFERENCES_NAME = 'myprefences';		//定义一个myPrefencces实例数据名
const KEY_APP_FONT_SIZE = 'appFontSize';	//定义一个常量保存数据的关键字
let prefence =
步骤
  1. 导入首选项模块
import dataPrefence from '@ohos.data.preferences'
  1. 获取首选项实例,读取指定文件
//this.context是UIAbilityContext,MyAppPreferences是Preferences实例对象
dataPrefence.getPreferences(this.context,'MyAppPreferences')
	.then(preferences => {
    //获取成功
	})
	.catch(reason => {
    //获取失败
	})

函数签名getPreferences函数接受三个参数——一个Context对象(代表应用程序或能力的上下文),一个字符串(表示偏好设置文件的名称),以及一个AsyncCallback<Preferences>回调函数(当偏好设置实例可用时会被调用)。

function getPreferences(context: Context, name: string, callback: AsyncCallback<Preferences>): void;
  1. 数据操作
//写入数据,如果已经存在则会覆盖,可以用.has()判断是否存在
preferences.put('ker',val)
	.then(() => preferences.flush()) //刷到磁盘
	.catch(reason => {}) 	//处理异常
//删除数据
preferences.delete('key')
 .then(() => {}).catch(reason => {})
//查询数据
preferences.get('key','defaultValue')
	.then(value => console.log('查询成功'))
	.catch(reason => console.log('查询失败'))
关系数据库存储

概念

关系数据库(RDB)时基于关系模型组织管理数据的数据库

RDB中一般包括若干个二维的数据表,每个表以行和列的形式存储数据。HarmonyOS关系数据存储底层使用SQLite作为持久化存储引擎。

使用关系数据存储框架提供了一系列可以操作关系数据库的应用程序接口。在基于ArkTS的开发中,这些接口定义在ohos.data.rdb包中,因此使用时需要导入该包:

//过时接口
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';
import {relationalStore, ValuesBucket } from '@kit.ArkData'
  1. 初始化数据库表
//2.1.rdb配置
const config = {
    name:'MyApplication.db',//数据库文件名
    securityLevel: relationalStore.SecurityLevel.S1 //数据库安全级别
}
//2.2.初始化表的SQL
const sql = `CREATE TABLE IF NOT EXISTS TASK (
				ID INTEGER PRIMARY KEY,
				NAME TEXT NOT NULL,
				FINISHED bit
				)`
//2.3.获取rdb
relationalStore.getRdbStore(this.context, config, (err,rdbStore) =>{
    //2.4.执行Sql,后续大的是所有增删改查都是使用rdbStore对象
    rdbStore.executeSql(sql)
})

增删改查:

  1. 新增数据
//1.1.准备数据
let task = {id: 1,name: '任务1', finished: flase};
//1.2.新增
this.rdbStore.insert(this.tableName,task) //(表名,数据对象)
  1. 修改数据
//2.1.要更新的数据
let task = {'finished': true}
//2.2.查询条件,RdbPredicates就是条件谓词
let predicates = new relationalStore.RdbPredicates(this.tableName)//this.tableName为表名
//2.3.执行更新
this.rdbStore.update(task,predicates)
  1. 删除
//3.1.查询条件
let predicates = new ralationalStore.RdbPredicates(this.tableName)
//3.2.执行删除
this.rdbStore.delete(predicates)
  1. 查询

4.1.查询数据

//1.1.查询条件
let predicates = new ralationalStore.RdbPredicates(this.tableName)
//1.2.执行查询
let result await this.rdbStore.query(predicates, ['ID','NAME',FINISHED])

4.2.解析结果

//2.1.准备数据保存结果s
let tasks: any[] = []
//2.2.循环遍历结果集,判断是否结果遍历到最后一行
while (!result.isAtLastRow) {
    //指针移动到下一行数据
    result.goToMextRow()
    //根据字段名获取字段index,从而获取字段值
    let id = result.getLong(result.getColumnIndex('ID'))
    let name = result.getString(result.getColumnIndex('NAME'))
    tasks.push({id, name})
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值