學(xué)習(xí)筆記—基于JS/ets的輕量級存儲
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
前言
數(shù)據(jù)存儲對于應(yīng)用開發(fā)是必不可少的一環(huán),今天就給大家分享我的JS/ets的輕量級存儲的學(xué)習(xí)筆記O(∩_∩)O,類似于Java的輕量級偏好數(shù)據(jù)庫,所以我喜歡稱它為JS/ets的輕量級偏好數(shù)據(jù)庫,如果此稱呼有問題的話,希望各位多多指教,與各位開發(fā)者們一起交流學(xué)習(xí)||ヽ( ̄▽ ̄)ノミ|Ю
輕量級存儲為應(yīng)用提供key-value鍵值型的文件數(shù)據(jù)處理能力,支持應(yīng)用對數(shù)據(jù)進(jìn)行輕量級存儲及查詢。數(shù)據(jù)存儲形式為鍵值對,鍵的類型為字符串型,值的存儲數(shù)據(jù)類型包括數(shù)字型、字符型、布爾型。要注意的是,該模塊接口從API version 6開始支持的哦~
效果圖

正文
1. 創(chuàng)建一個(gè)Empty eTS Ability應(yīng)用
DevEco Studio下載安裝成功后,打開DevEco Studio,點(diǎn)擊左上角的File,點(diǎn)擊New,再選擇New Project,選擇Empty Ability選項(xiàng),點(diǎn)擊Next按鈕。

將文件命名為Storage(文件名不能出現(xiàn)中文或者特殊字符,否則將無法成功創(chuàng)建項(xiàng)目文件),Project Type勾選Application,選擇保存路徑,Language勾選eTS,選擇API7,設(shè)備勾選Phone,最后點(diǎn)擊Finish按鈕。

2. 導(dǎo)入模塊
基于JS/ets的輕量級存儲是需要用到dataStorage的,來自于’@ohos.data.storage’。
- import dataStorage from '@ohos.data.storage'
3. 通過數(shù)據(jù)存儲路徑創(chuàng)建Storage
目前應(yīng)用程序內(nèi)部數(shù)據(jù)存儲路徑必須為‘/date/date/文件名’,這一點(diǎn)必須牢牢記住,否則就會無法進(jìn)行輕量級存儲了。
定義好應(yīng)用程序內(nèi)部數(shù)據(jù)存儲路徑后,通過dataStorage.getStorageSync讀取指定文件,將數(shù)據(jù)加載到Storage實(shí)例,用于數(shù)據(jù)操作。
- const STORAGE_PATH = '/data/data/mystorage'//應(yīng)用程序內(nèi)部數(shù)據(jù)存儲路徑
- var storage//定義Storage實(shí)例
- storage = dataStorage.getStorageSync(STORAGE_PATH)//創(chuàng)建Storage實(shí)例
4. 檢查Storage實(shí)例是否包含鍵值的存儲
hasSync可用于檢查存儲對象是否包含名為給定key的存儲,并返回參數(shù)類型為boolean的參數(shù),為參數(shù)為true表示存在,false表示不存在。
- const STORAGE_KEY = 'MY_STORAGE_KEY'//定義key
- @State isExist: boolean = false
- this.isExist = storage.hasSync(STORAGE_KEY)//檢查存儲對象是否包含鍵值的存儲
5. 寫入數(shù)據(jù)并實(shí)例持久化
寫入數(shù)據(jù)可通過putSync,必須先獲取指定文件對應(yīng)的Storage實(shí)例,然后借助putSync將數(shù)據(jù)寫入Storage實(shí)例中。
實(shí)例持久化數(shù)據(jù)可通過flushSync,將當(dāng)前storage對象中的修改保存到當(dāng)前的storage,并同步存儲到文件中。但要值得注意的是,目前模擬器對這一功能兼容的不完善,無法持久化的,如果后臺把程序殺死,數(shù)據(jù)一樣會消失的。
- var value = 0//定義value
- storage.putSync(STORAGE_KEY, value)//寫入數(shù)據(jù)
- storage.flushSync()//實(shí)例持久化數(shù)據(jù)
6. 獲取數(shù)據(jù)
getSync為獲取鍵對應(yīng)的值,如果值為null或者非默認(rèn)值類型,返回默認(rèn)數(shù)據(jù)。
- @State Value: number = 0
- this.Value = storage.getSync(STORAGE_KEY, -1)//獲取key對應(yīng)的數(shù)據(jù),如果不存在則返回默認(rèn)數(shù)據(jù)(-1)
7. 刪除數(shù)據(jù)
deleteSync為從存儲對象中刪除名為給定key的存儲。
clearSync則為清除此存儲對象中的所有存儲。
- storage.deleteSync(STORAGE_KEY)//刪除key對應(yīng)的數(shù)據(jù)
- //store.clearSync()//刪除所有數(shù)據(jù)
8. 刪除Storage實(shí)例
dataStorage.deleteStorageSync為從內(nèi)存中移除指定文件對應(yīng)的Storage單實(shí)例,并刪除指定文件及其備份文件、損壞文件。
dataStorage.removeStorageFromCacheSync則為從內(nèi)存中移除指定文件對應(yīng)的Storage單實(shí)例。
- storage = dataStorage.deleteStorageSync(STORAGE_PATH)//刪除Storage實(shí)例并刪除指定文件及其備份文件、損壞文件
- //storage = dataStorage.removeStorageFromCacheSync(STORAGE_PATH)//僅刪除Storage實(shí)例
完整源碼
index.ets:
- import dataStorage from '@ohos.data.storage';//導(dǎo)入模塊
- const STORAGE_PATH = '/data/data/mystorage'//應(yīng)用程序內(nèi)部數(shù)據(jù)存儲路徑
- const STORAGE_KEY = 'MY_STORAGE_KEY'//定義key
- var storage//定義Storage實(shí)例
- 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('創(chuàng)建輕量級數(shù)據(jù)庫\ngetStorageSync')
- .height(80)
- .width(330)
- .fontSize(30)
- .margin(10)
- .onClick(() => {
- storage = dataStorage.getStorageSync(STORAGE_PATH)//創(chuàng)建Storage實(shí)例
- })
- Button('刪除輕量級數(shù)據(jù)庫\ndeleteStorageSync')
- .height(80)
- .width(330)
- .fontSize(30)
- .margin(10)
- .onClick(() => {
- storage = dataStorage.deleteStorageSync(STORAGE_PATH)//刪除Storage實(shí)例并刪除指定文件及其備份文件、損壞文件
- //storage = dataStorage.removeStorageFromCacheSync(STORAGE_PATH)//僅刪除Storage實(shí)例
- })
- Button('寫入數(shù)據(jù)(value加1)\nputSync')
- .height(80)
- .width(330)
- .fontSize(30)
- .margin(10)
- .onClick(() => {
- value++
- storage.putSync(STORAGE_KEY, value)//寫入數(shù)據(jù)
- storage.flushSync()//實(shí)例持久化數(shù)據(jù)
- })
- Button('刪除數(shù)據(jù)\ndeleteSync')
- .height(80)
- .width(330)
- .fontSize(30)
- .margin(10)
- .onClick(() => {
- storage.deleteSync(STORAGE_KEY)//刪除key對應(yīng)的數(shù)據(jù)
- //store.clearSync()//刪除所有數(shù)據(jù)
- })
- Button('檢查鍵是否存在\nhasSync:' + (this.isExist == true ? 'true' : 'false'))
- .height(80)
- .width(330)
- .fontSize(30)
- .margin(10)
- .onClick(() => {
- this.isExist = storage.hasSync(STORAGE_KEY)//檢查存儲對象是否包含鍵值的存儲
- })
- Button('讀取數(shù)據(jù)\ngetSync:Value=' + this.Value)
- .height(80)
- .width(330)
- .fontSize(30)
- .margin(10)
- .onClick(() => {
- this.Value = storage.getSync(STORAGE_KEY, -1)//獲取key對應(yīng)的數(shù)據(jù),如果不存在則返回默認(rèn)數(shù)據(jù)(-1)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載
https://harmonyos.51cto.com/resource/1577
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)