首先介紹幾個(gè)基本概念和方法
①關(guān)系型數(shù)據(jù)庫
基于關(guān)系模型來管理數(shù)據(jù)的數(shù)據(jù)庫,以行和列的形式存儲(chǔ)數(shù)據(jù)。(可以簡單理解成一個(gè) excel 表格的形式)
②謂詞
數(shù)據(jù)庫中用來代表數(shù)據(jù)實(shí)體的性質(zhì)、特征或者數(shù)據(jù)實(shí)體之間關(guān)系的詞項(xiàng),主要用來定義數(shù)據(jù)庫的操作條件。(謂詞:屬于函數(shù)的一種,但其返回值是真值(true/false/unknown))
③結(jié)果集
指用戶查詢之后的結(jié)果集合,有多種方法可以對(duì)數(shù)據(jù)進(jìn)行訪問。
④SQLite 數(shù)據(jù)庫
它是一個(gè)開源的輕型的數(shù)據(jù)庫。
⑤場(chǎng)景介紹
關(guān)系型數(shù)據(jù)庫是在 SQLite 基礎(chǔ)上實(shí)現(xiàn)的本地?cái)?shù)據(jù)操作機(jī)制,提供給用戶無需編寫原生 SQL 語句就能進(jìn)行數(shù)據(jù)增刪改查的方法,同時(shí)也支持原生 SQL 語句操作。
再看幾個(gè)Data中相關(guān)生命周期功能介紹
如下圖:
運(yùn)作機(jī)制
//=====================導(dǎo)入模塊部分=========================
//導(dǎo)入DataAbility謂詞相關(guān)模塊
importdataAbilityfrom'@ohos.data.dataability'
//導(dǎo)入rdb關(guān)系數(shù)據(jù)庫模塊
importdataRdbfrom'@ohos.data.rdb'
//=====================定義變量部分=========================
//定義數(shù)據(jù)庫表名book
constTABLE_NAME='book'
//與此RDB存儲(chǔ)相關(guān)的數(shù)據(jù)庫配置。. encryptKey:為數(shù)據(jù)庫設(shè)置的加密密鑰
constSTORE_CONFIG={name:'book.db',encryptKey:newUint8Array([])}
//定義SQL_CREATE_TABLE關(guān)鍵字參數(shù),下面執(zhí)行參數(shù)會(huì)用到
constSQL_CREATE_TABLE='CREATETABLEIFNOTEXISTSbook(idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTNOTNULL,ageINTEGER,introductionTEXTNOTNULL)'
//定義一個(gè)變量進(jìn)行儲(chǔ)存數(shù)據(jù)庫返回內(nèi)容,避免多次調(diào)用執(zhí)行,節(jié)省性能
letrdbStore:any=undefined
//測(cè)試用打log用的
constTAG='DataAbility.data'
//=====================創(chuàng)建數(shù)據(jù)庫=========================
exportdefault{
// onInitialized 在Ability初始化調(diào)用,通過此回調(diào)方法執(zhí)行rdb等初始化操作。
onInitialized(abilityInfo){
console.info('DataAbilityonInitialized,abilityInfo='+abilityInfo.bundleName)
//getRdbStore()獲得一個(gè)相關(guān)的RdbStore,操作關(guān)系型數(shù)據(jù)庫,用戶可以根據(jù)自己的需求配置RdbStore的參數(shù),然后通過RdbStore調(diào)用相關(guān)接口可以執(zhí)行相關(guān)的數(shù)據(jù)操作,結(jié)果以callback形式返回。
dataRdb.getRdbStore(STORE_CONFIG,1,(err,store)=>{
console.info('[data]getRdbStoreThen')
//執(zhí)行包含指定參數(shù)但不返回值的SQL語句,結(jié)果以Promise形式返回。
store.executeSql(SQL_CREATE_TABLE,[])
//把獲得的數(shù)據(jù)庫存入本地變量,防止后面多次操作讀取創(chuàng)建
rdbStore=store
});
},
//=====================數(shù)據(jù)庫操作方法=========================
//url:通信使用的URI
//callback:自定義回調(diào)函數(shù)名如果操作成功,則返回ResultSet對(duì)象。
//valueBucket:指示數(shù)據(jù)庫中要更新的數(shù)據(jù)行。鍵值對(duì)與數(shù)據(jù)庫表的列名相關(guān)聯(lián)
//TABLE_NAME:指定的目標(biāo)表名。
//insert:向數(shù)據(jù)中插入一條數(shù)據(jù)。 callbacke方式調(diào)用:
insert(uri,valueBucket,callback){
console.info(TAG+'insertstart')
rdbStore.insert(TABLE_NAME,valueBucket,callback)
},
//url:通信使用的URI
//valueBucket:指示數(shù)據(jù)庫中要更新的數(shù)據(jù)行。鍵值對(duì)與數(shù)據(jù)庫表的列名相關(guān)聯(lián)
//callback:指定callback回調(diào)函數(shù)。如果操作成功,則返回ResultSet對(duì)象。
// batchInsert:向數(shù)據(jù)庫中插入多條數(shù)據(jù)。
batchInsert(uri,valueBuckets,callback){
console.info(TAG+'batchinsertstart')
//循環(huán)遍歷
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的實(shí)例對(duì)象指定的查詢條件。
//columns:表示要查詢的列。如果值為空,則查詢應(yīng)用于所有列。
//callback:指定callback回調(diào)函數(shù)。如果操作成功,則返回ResultSet對(duì)象。
//query:查詢數(shù)據(jù)庫中的數(shù)據(jù)。
query(uri,columns,predicates,callback){
console.info(TAG+'querystart')
letrdbPredicates=dataAbility.createRdbPredicates(TABLE_NAME,predicates)
rdbStore.query(rdbPredicates,columns,callback)
},
//url:通信使用的URI
//valueBucket:指示數(shù)據(jù)庫中要更新的數(shù)據(jù)行。鍵值對(duì)與數(shù)據(jù)庫表的列名相關(guān)聯(lián)
//predicates:表示要插入到表中的數(shù)據(jù)行。
//callback:指定callback回調(diào)函數(shù)。如果操作成功,則返回ResultSet對(duì)象。
// update:更新數(shù)據(jù)庫中的數(shù)據(jù)。
update(uri,valueBucket,predicates,callback){
console.info(TAG+'updatestart')
letrdbPredicates=dataAbility.createRdbPredicates(TABLE_NAME,predicates)
rdbStore.update(valueBucket,rdbPredicates,callback)
},
//url:通信使用的URI
//delete:刪除一條或多條數(shù)據(jù)。
//predicates:表示要?jiǎng)h除表中的數(shù)據(jù)行。
//callback:指定callback回調(diào)函數(shù)。如果操作成功,則返回ResultSet對(duì)象。
delete(uri,predicates,callback){
console.info(TAG+'deletestart')
letrdbPredicates=dataAbility.createRdbPredicates(TABLE_NAME,predicates)
rdbStore.delete(rdbPredicates,callback)
}
};
文章有錯(cuò)誤地方還請(qǐng)大佬一定指出糾正!
-
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3851瀏覽量
64717 -
Data
+關(guān)注
關(guān)注
0文章
63瀏覽量
38344 -
模型
+關(guān)注
關(guān)注
1文章
3330瀏覽量
49253
原文標(biāo)題:鴻蒙Data Ability關(guān)系數(shù)據(jù)庫使用
文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
手動(dòng)移液器的使用操作過程
怎樣去操作FTS-300光纜普查儀?在操作過程中有哪些常見問題?
C語言的平臺(tái)操作過程
如何去實(shí)現(xiàn)STM32串口通訊的操作過程呢
STM32內(nèi)部FLASH操作過程
RT-Thread操作系統(tǒng)從開機(jī)到關(guān)機(jī)的操作過程是怎樣的?
基于Rdb創(chuàng)建的一個(gè)Data_Ability的數(shù)據(jù)操作過程
心電監(jiān)護(hù)儀操作過程
![心電監(jiān)護(hù)儀<b class='flag-5'>操作過程</b>](https://file1.elecfans.com//web2/M00/A6/18/wKgZomUMO7WAD2sHAAAPPx6vIIY649.jpg)
FPGA應(yīng)用中部分重配置的操作過程
![FPGA應(yīng)用中部分重配置的<b class='flag-5'>操作過程</b>](https://file.elecfans.com/web2/M00/05/B4/poYBAGDitzmAeeTbAABJyDAcIM0268.png)
評(píng)論