学习笔记—基于JS/ets的轻量级存储
前言
数据存储对于应用开发是必不可少的一环,今天就给大家分享我的JS/ets的轻量级存储的学习笔记O(∩_∩)O,类似于Java的轻量级偏好数据库,所以我喜欢称它为JS/ets的轻量级偏好数据库,如果此称呼有问题的话,希望各位多多指教,与各位开发者们一起交流学习||ヽ( ̄▽ ̄)ノミ|Ю
轻量级存储为应用提供key-value键值型的文件数据处理能力,支持应用对数据进行轻量级存储及查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型。要注意的是,该模块接口从API version 6开始支持的哦~
效果图
![【木棉花】学习笔记——基于JS/ets的轻量级存储-鸿蒙HarmonyOS技术社区](https://s5.51cto.com/oss/202112/13/e92202a601338d9dd2edce1a45c6aee0.jpg)
正文
1. 创建一个Empty eTS Ability应用
DevEco Studio下载安装成功后,打开DevEco Studio,点击左上角的File,点击New,再选择New Project,选择Empty Ability选项,点击Next按钮。
![【木棉花】学习笔记——基于JS/ets的轻量级存储-鸿蒙HarmonyOS技术社区](https://s6.51cto.com/oss/202112/13/899e3eceda4f7f5c1a75120f7c8d9ab6.jpg)
将文件命名为Storage(文件名不能出现中文或者特殊字符,否则将无法成功创建项目文件),Project Type勾选Application,选择保存路径,Language勾选eTS,选择API7,设备勾选Phone,最后点击Finish按钮。
![【木棉花】学习笔记——基于JS/ets的轻量级存储-鸿蒙HarmonyOS技术社区](https://s3.51cto.com/oss/202112/13/57d8e44a4ff8e53e141db00f530b5eda.jpg)
2. 导入模块
基于JS/ets的轻量级存储是需要用到dataStorage的,来自于’@ohos.data.storage’。
- import dataStorage from '@ohos.data.storage'
3. 通过数据存储路径创建Storage
目前应用程序内部数据存储路径必须为‘/date/date/文件名’,这一点必须牢牢记住,否则就会无法进行轻量级存储了。
定义好应用程序内部数据存储路径后,通过dataStorage.getStorageSync读取指定文件,将数据加载到Storage实例,用于数据操作。
- const STORAGE_PATH = '/data/data/mystorage'//应用程序内部数据存储路径
- var storage//定义Storage实例
- storage = dataStorage.getStorageSync(STORAGE_PATH)//创建Storage实例
4. 检查Storage实例是否包含键值的存储
hasSync可用于检查存储对象是否包含名为给定key的存储,并返回参数类型为boolean的参数,为参数为true表示存在,false表示不存在。
- const STORAGE_KEY = 'MY_STORAGE_KEY'//定义key
- @State isExist: boolean = false
- this.isExist = storage.hasSync(STORAGE_KEY)//检查存储对象是否包含键值的存储
5. 写入数据并实例持久化
写入数据可通过putSync,必须先获取指定文件对应的Storage实例,然后借助putSync将数据写入Storage实例中。
实例持久化数据可通过flushSync,将当前storage对象中的修改保存到当前的storage,并同步存储到文件中。但要值得注意的是,目前模拟器对这一功能兼容的不完善,无法持久化的,如果后台把程序杀死,数据一样会消失的。
- var value = 0//定义value
- storage.putSync(STORAGE_KEY, value)//写入数据
- storage.flushSync()//实例持久化数据
6. 获取数据
getSync为获取键对应的值,如果值为null或者非默认值类型,返回默认数据。
- @State Value: number = 0
- this.Value = storage.getSync(STORAGE_KEY, -1)//获取key对应的数据,如果不存在则返回默认数据(-1)
7. 删除数据
deleteSync为从存储对象中删除名为给定key的存储。
clearSync则为清除此存储对象中的所有存储。
- storage.deleteSync(STORAGE_KEY)//删除key对应的数据
- //store.clearSync()//删除所有数据
8. 删除Storage实例
dataStorage.deleteStorageSync为从内存中移除指定文件对应的Storage单实例,并删除指定文件及其备份文件、损坏文件。
dataStorage.removeStorageFromCacheSync则为从内存中移除指定文件对应的Storage单实例。
- storage = dataStorage.deleteStorageSync(STORAGE_PATH)//删除Storage实例并删除指定文件及其备份文件、损坏文件
- //storage = dataStorage.removeStorageFromCacheSync(STORAGE_PATH)//仅删除Storage实例
完整源码
index.ets:
- import dataStorage from '@ohos.data.storage';//导入模块
- const STORAGE_PATH = '/data/data/mystorage'//应用程序内部数据存储路径
- const STORAGE_KEY = 'MY_STORAGE_KEY'//定义key
- var storage//定义Storage实例
- var value = 0//定义value
- @Entry
- @Component
- struct Index {
- @State Value: number = 0
- @State isExist: boolean = false
- build() {
- Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
- Button('创建轻量级数据库\ngetStorageSync')
- .height(80)
- .width(330)
- .fontSize(30)
- .margin(10)
- .onClick(() => {
- storage = dataStorage.getStorageSync(STORAGE_PATH)//创建Storage实例
- })
- Button('删除轻量级数据库\ndeleteStorageSync')
- .height(80)
- .width(330)
- .fontSize(30)
- .margin(10)
- .onClick(() => {
- storage = dataStorage.deleteStorageSync(STORAGE_PATH)//删除Storage实例并删除指定文件及其备份文件、损坏文件
- //storage = dataStorage.removeStorageFromCacheSync(STORAGE_PATH)//仅删除Storage实例
- })
- Button('写入数据(value加1)\nputSync')
- .height(80)
- .width(330)
- .fontSize(30)
- .margin(10)
- .onClick(() => {
- value++
- storage.putSync(STORAGE_KEY, value)//写入数据
- storage.flushSync()//实例持久化数据
- })
- Button('删除数据\ndeleteSync')
- .height(80)
- .width(330)
- .fontSize(30)
- .margin(10)
- .onClick(() => {
- storage.deleteSync(STORAGE_KEY)//删除key对应的数据
- //store.clearSync()//删除所有数据
- })
- Button('检查键是否存在\nhasSync:' + (this.isExist == true ? 'true' : 'false'))
- .height(80)
- .width(330)
- .fontSize(30)
- .margin(10)
- .onClick(() => {
- this.isExist = storage.hasSync(STORAGE_KEY)//检查存储对象是否包含键值的存储
- })
- Button('读取数据\ngetSync:Value=' + this.Value)
- .height(80)
- .width(330)
- .fontSize(30)
- .margin(10)
- .onClick(() => {
- this.Value = storage.getSync(STORAGE_KEY, -1)//获取key对应的数据,如果不存在则返回默认数据(-1)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
文章相关附件可以点击下面的原文链接前往下载
https://harmonyos.51cto.com/resource/1577
相关文章
- 年前干货:数据工程师必备的学习资源(附链接)
- 黑产“羊毛党”令拼多多损失上千万!联通风控大数据垒起攻守线
- 打破樊篱 中科院推出大数据共享平台
- 菜鸟数据科学家五大误区
- 人工智能和大数据是如何联系在一起的
- 数据科学大佬的简历上都有哪些技能?
- 真实与炒作,发展与失望并存的一年:大咖共同回首数据科学与分析的2018和展望2019
- 豪华的讲师阵容+技术实战 华为HDG成都站要逆天啦!
- 与行业融合者得天下---听中科天玑重新解读大数据
- 大数据无处不在 如何将数据转化为行动和价值?
- 5个步骤开启你的数据科学职业生涯!
- 华为HDG苏州站:重体验,创新品 一切从开发者的角度出发
- 小白上路?工程师转型?应届毕业生?三种“圈外人”的数据科学入行指南
- HDG杭州站首次爆料华为3大生态圈 开发者称大饱耳福
- 都是数据科学家,为什么TA薪水比你高?
- 汇聚创新 共创未来---记2016华为开发者大赛沙龙深圳站
- 浅谈移动应用的跨平台开发工具(Xamarin和React Native)
- “江南佳丽地,金陵帝王州”—— 华为开发者汇HDG南京站现场报道
- 深入大数据平台心脏:饿了么调度系统全解
- 程序员面试的标准答案并不标准