文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

学习笔记—基于JS/ets的轻量级存储

2024-12-02 13:36

关注

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

前言

数据存储对于应用开发是必不可少的一环,今天就给大家分享我的JS/ets的轻量级存储的学习笔记O(∩_∩)O,类似于Java的轻量级偏好数据库,所以我喜欢称它为JS/ets的轻量级偏好数据库,如果此称呼有问题的话,希望各位多多指教,与各位开发者们一起交流学习||ヽ( ̄▽ ̄)ノミ|Ю

轻量级存储为应用提供key-value键值型的文件数据处理能力,支持应用对数据进行轻量级存储及查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型。要注意的是,该模块接口从API version 6开始支持的哦~

效果图


正文

1. 创建一个Empty eTS Ability应用

DevEco Studio下载安装成功后,打开DevEco Studio,点击左上角的File,点击New,再选择New Project,选择Empty Ability选项,点击Next按钮。


将文件命名为Storage(文件名不能出现中文或者特殊字符,否则将无法成功创建项目文件),Project Type勾选Application,选择保存路径,Language勾选eTS,选择API7,设备勾选Phone,最后点击Finish按钮。


2. 导入模块

基于JS/ets的轻量级存储是需要用到dataStorage的,来自于’@ohos.data.storage’。

  1. import dataStorage from '@ohos.data.storage' 

3. 通过数据存储路径创建Storage

目前应用程序内部数据存储路径必须为‘/date/date/文件名’,这一点必须牢牢记住,否则就会无法进行轻量级存储了。

定义好应用程序内部数据存储路径后,通过dataStorage.getStorageSync读取指定文件,将数据加载到Storage实例,用于数据操作。

  1. const STORAGE_PATH = '/data/data/mystorage'//应用程序内部数据存储路径 
  2. var storage//定义Storage实例 
  3. storage = dataStorage.getStorageSync(STORAGE_PATH)//创建Storage实例 

4. 检查Storage实例是否包含键值的存储

hasSync可用于检查存储对象是否包含名为给定key的存储,并返回参数类型为boolean的参数,为参数为true表示存在,false表示不存在。

  1. const STORAGE_KEY = 'MY_STORAGE_KEY'//定义key 
  2. @State isExist: boolean = false 
  3. this.isExist = storage.hasSync(STORAGE_KEY)//检查存储对象是否包含键值的存储 

5. 写入数据并实例持久化

写入数据可通过putSync,必须先获取指定文件对应的Storage实例,然后借助putSync将数据写入Storage实例中。

实例持久化数据可通过flushSync,将当前storage对象中的修改保存到当前的storage,并同步存储到文件中。但要值得注意的是,目前模拟器对这一功能兼容的不完善,无法持久化的,如果后台把程序杀死,数据一样会消失的。

  1. var value = 0//定义value 
  2. storage.putSync(STORAGE_KEY, value)//写入数据 
  3. storage.flushSync()//实例持久化数据 

6. 获取数据

getSync为获取键对应的值,如果值为null或者非默认值类型,返回默认数据。

  1. @State Value: number = 0 
  2. this.Value = storage.getSync(STORAGE_KEY, -1)//获取key对应的数据,如果不存在则返回默认数据(-1) 

7. 删除数据

deleteSync为从存储对象中删除名为给定key的存储。

clearSync则为清除此存储对象中的所有存储。

  1. storage.deleteSync(STORAGE_KEY)//删除key对应的数据 
  2. //store.clearSync()//删除所有数据 

8. 删除Storage实例

dataStorage.deleteStorageSync为从内存中移除指定文件对应的Storage单实例,并删除指定文件及其备份文件、损坏文件。

dataStorage.removeStorageFromCacheSync则为从内存中移除指定文件对应的Storage单实例。

  1. storage = dataStorage.deleteStorageSync(STORAGE_PATH)//删除Storage实例并删除指定文件及其备份文件、损坏文件 
  2. //storage = dataStorage.removeStorageFromCacheSync(STORAGE_PATH)//仅删除Storage实例 

完整源码

index.ets:

  1. import dataStorage from '@ohos.data.storage';//导入模块 
  2. const STORAGE_PATH = '/data/data/mystorage'//应用程序内部数据存储路径 
  3. const STORAGE_KEY = 'MY_STORAGE_KEY'//定义key 
  4. var storage//定义Storage实例 
  5. var value = 0//定义value 
  6.  
  7. @Entry 
  8. @Component 
  9. struct Index { 
  10.   @State Value: number = 0 
  11.   @State isExist: boolean = false 
  12.  
  13.   build() { 
  14.     Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 
  15.       Button('创建轻量级数据库\ngetStorageSync'
  16.         .height(80) 
  17.         .width(330) 
  18.         .fontSize(30) 
  19.         .margin(10) 
  20.         .onClick(() => { 
  21.           storage = dataStorage.getStorageSync(STORAGE_PATH)//创建Storage实例 
  22.         }) 
  23.       Button('删除轻量级数据库\ndeleteStorageSync'
  24.         .height(80) 
  25.         .width(330) 
  26.         .fontSize(30) 
  27.         .margin(10) 
  28.         .onClick(() => { 
  29.           storage = dataStorage.deleteStorageSync(STORAGE_PATH)//删除Storage实例并删除指定文件及其备份文件、损坏文件 
  30.           //storage = dataStorage.removeStorageFromCacheSync(STORAGE_PATH)//仅删除Storage实例 
  31.         }) 
  32.       Button('写入数据(value加1)\nputSync'
  33.         .height(80) 
  34.         .width(330) 
  35.         .fontSize(30) 
  36.         .margin(10) 
  37.         .onClick(() => { 
  38.           value++ 
  39.           storage.putSync(STORAGE_KEY, value)//写入数据 
  40.           storage.flushSync()//实例持久化数据 
  41.         }) 
  42.       Button('删除数据\ndeleteSync'
  43.         .height(80) 
  44.         .width(330) 
  45.         .fontSize(30) 
  46.         .margin(10) 
  47.         .onClick(() => { 
  48.           storage.deleteSync(STORAGE_KEY)//删除key对应的数据 
  49.           //store.clearSync()//删除所有数据 
  50.         }) 
  51.       Button('检查键是否存在\nhasSync:' + (this.isExist == true ? 'true' : 'false')) 
  52.         .height(80) 
  53.         .width(330) 
  54.         .fontSize(30) 
  55.         .margin(10) 
  56.         .onClick(() => { 
  57.           this.isExist = storage.hasSync(STORAGE_KEY)//检查存储对象是否包含键值的存储 
  58.         }) 
  59.       Button('读取数据\ngetSync:Value=' + this.Value) 
  60.         .height(80) 
  61.         .width(330) 
  62.         .fontSize(30) 
  63.         .margin(10) 
  64.         .onClick(() => { 
  65.           this.Value = storage.getSync(STORAGE_KEY, -1)//获取key对应的数据,如果不存在则返回默认数据(-1) 
  66.         }) 
  67.     } 
  68.     .width('100%'
  69.     .height('100%'
  70.   } 

文章相关附件可以点击下面的原文链接前往下载

https://harmonyos.51cto.com/resource/1577

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

来源:鸿蒙社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯