首先介紹幾個基本概念和方法
①關系型數據庫
基于關系模型來管理數據的數據庫,以行和列的形式存儲數據。(可以簡單理解成一個 excel 表格的形式)
②謂詞
數據庫中用來代表數據實體的性質、特征或者數據實體之間關系的詞項,主要用來定義數據庫的操作條件。(謂詞:屬于函數的一種,但其返回值是真值(true/false/unknown))
③結果集
指用戶查詢之后的結果集合,有多種方法可以對數據進行訪問。
④SQLite 數據庫
它是一個開源的輕型的數據庫。
⑤場景介紹
關系型數據庫是在 SQLite 基礎上實現的本地數據操作機制,提供給用戶無需編寫原生 SQL 語句就能進行數據增刪改查的方法,同時也支持原生 SQL 語句操作。
再看幾個Data中相關生命周期功能介紹
如下圖:
運作機制
從上圖可以知:Data 模板的 Ability 是基于 Rdb 封裝的,Rdb 是基于 SQLite 數據庫,一個開源的輕型的數據庫,所以Data_Ability 高效便捷的為我們提供了一套工具去管理其自身和其他應用存儲數據的訪問。 下面逐步分析基于 Rdb 創建的一個 Data_Ability 的數據操作過程:
//=====================導入模塊部分=========================
//導入DataAbility謂詞相關模塊
importdataAbilityfrom'@ohos.data.dataability'
//導入rdb關系數據庫模塊
importdataRdbfrom'@ohos.data.rdb'
//=====================定義變量部分=========================
//定義數據庫表名book
constTABLE_NAME='book'
//與此RDB存儲相關的數據庫配置。. encryptKey:為數據庫設置的加密密鑰
constSTORE_CONFIG={name:'book.db',encryptKey:newUint8Array([])}
//定義SQL_CREATE_TABLE關鍵字參數,下面執行參數會用到
constSQL_CREATE_TABLE='CREATETABLEIFNOTEXISTSbook(idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTNOTNULL,ageINTEGER,introductionTEXTNOTNULL)'
//定義一個變量進行儲存數據庫返回內容,避免多次調用執行,節省性能
letrdbStore:any=undefined
//測試用打log用的
constTAG='DataAbility.data'
//=====================創建數據庫=========================
exportdefault{
// onInitialized 在Ability初始化調用,通過此回調方法執行rdb等初始化操作。
onInitialized(abilityInfo){
console.info('DataAbilityonInitialized,abilityInfo='+abilityInfo.bundleName)
//getRdbStore()獲得一個相關的RdbStore,操作關系型數據庫,用戶可以根據自己的需求配置RdbStore的參數,然后通過RdbStore調用相關接口可以執行相關的數據操作,結果以callback形式返回。
dataRdb.getRdbStore(STORE_CONFIG,1,(err,store)=>{
console.info('[data]getRdbStoreThen')
//執行包含指定參數但不返回值的SQL語句,結果以Promise形式返回。
store.executeSql(SQL_CREATE_TABLE,[])
//把獲得的數據庫存入本地變量,防止后面多次操作讀取創建
rdbStore=store
});
},
//=====================數據庫操作方法=========================
//url:通信使用的URI
//callback:自定義回調函數名如果操作成功,則返回ResultSet對象。
//valueBucket:指示數據庫中要更新的數據行。鍵值對與數據庫表的列名相關聯
//TABLE_NAME:指定的目標表名。
//insert:向數據中插入一條數據。 callbacke方式調用:
insert(uri,valueBucket,callback){
console.info(TAG+'insertstart')
rdbStore.insert(TABLE_NAME,valueBucket,callback)
},
//url:通信使用的URI
//valueBucket:指示數據庫中要更新的數據行。鍵值對與數據庫表的列名相關聯
//callback:指定callback回調函數。如果操作成功,則返回ResultSet對象。
// batchInsert:向數據庫中插入多條數據。
batchInsert(uri,valueBuckets,callback){
console.info(TAG+'batchinsertstart')
//循環遍歷
for(leti=0;iconsole.info(TAG+'batchinserti='+i)
if(i1){
//最終還是用到的insert方法
rdbStore.insert(TABLE_NAME,valueBuckets[i],(num:number)=>{
console.info(TAG+'batchinsertret='+num)
})
}else{
rdbStore.insert(TABLE_NAME,valueBuckets[i],callback)
}
}
},
//url:通信使用的URI
//predicates:表示rdbPredicates的實例對象指定的查詢條件。
//columns:表示要查詢的列。如果值為空,則查詢應用于所有列。
//callback:指定callback回調函數。如果操作成功,則返回ResultSet對象。
//query:查詢數據庫中的數據。
query(uri,columns,predicates,callback){
console.info(TAG+'querystart')
letrdbPredicates=dataAbility.createRdbPredicates(TABLE_NAME,predicates)
rdbStore.query(rdbPredicates,columns,callback)
},
//url:通信使用的URI
//valueBucket:指示數據庫中要更新的數據行。鍵值對與數據庫表的列名相關聯
//predicates:表示要插入到表中的數據行。
//callback:指定callback回調函數。如果操作成功,則返回ResultSet對象。
// update:更新數據庫中的數據。
update(uri,valueBucket,predicates,callback){
console.info(TAG+'updatestart')
letrdbPredicates=dataAbility.createRdbPredicates(TABLE_NAME,predicates)
rdbStore.update(valueBucket,rdbPredicates,callback)
},
//url:通信使用的URI
//delete:刪除一條或多條數據。
//predicates:表示要刪除表中的數據行。
//callback:指定callback回調函數。如果操作成功,則返回ResultSet對象。
delete(uri,predicates,callback){
console.info(TAG+'deletestart')
letrdbPredicates=dataAbility.createRdbPredicates(TABLE_NAME,predicates)
rdbStore.delete(rdbPredicates,callback)
}
};
文章有錯誤地方還請大佬一定指出糾正!
-
數據庫
+關注
關注
7文章
3763瀏覽量
64274 -
Data
+關注
關注
0文章
62瀏覽量
38236 -
模型
+關注
關注
1文章
3171瀏覽量
48711
原文標題:鴻蒙Data Ability關系數據庫使用
文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論