訪問DataAbility
訪問DataAbility需導(dǎo)入基礎(chǔ)依賴包,以及獲取與DataAbility子模塊通信的URI字符串。
其中,基礎(chǔ)依賴包包括:
- @ohos.ability.featureAbility
- @ohos.data.dataAbility
- @ohos.data.rdb
訪問DataAbility的示例代碼如下:
-
創(chuàng)建工具接口類對象。
// 作為參數(shù)傳遞的URI,與config中定義的URI的區(qū)別是多了一個(gè)"/",有三個(gè)"/" import featureAbility from '@ohos.ability.featureAbility' import ohos_data_ability from '@ohos.data.dataAbility' import ohos_data_rdb from '@ohos.data.rdb' let urivar = "dataability:///com.ix.DataAbility" let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
-
構(gòu)建數(shù)據(jù)庫相關(guān)的RDB數(shù)據(jù)。
let valuesBucket = {"name": "gaolu"} let da = new ohos_data_ability.DataAbilityPredicates() let valArray =new Array("value1"); let cars = new Array({"batchInsert1" : "value1",});
注:關(guān)于DataAbilityPredicates的詳細(xì)內(nèi)容,請參考DataAbility謂詞。
-
調(diào)用insert方法向指定的DataAbility子模塊插入數(shù)據(jù)。
// callback方式調(diào)用: DAHelper.insert( urivar, valuesBucket, (error, data) => { console.info("DAHelper insert result: " + data) } );
// promise方式調(diào)用(await需要在async方法中使用): let datainsert = await DAHelper.insert(urivar, valuesBucket).then((data) => { console.info("insert success."); }).catch((error) => { console.error("insert failed."); });
-
調(diào)用delete方法刪除DataAbility子模塊中指定的數(shù)據(jù)。
// callback方式調(diào)用: DAHelper.delete( urivar, da, (error, data) => { console.info("DAHelper delete result: " + data) } );
// promise方式調(diào)用(await需要在async方法中使用): let datadelete = await DAHelper.delete( urivar, da, );
-
調(diào)用update方法更新指定DataAbility子模塊中的數(shù)據(jù)。
// callback方式調(diào)用: DAHelper.update( urivar, valuesBucket, da, (error, data) => { console.info("DAHelper update result: " + data) } );
// promise方式調(diào)用(await需要在async方法中使用): let dataupdate = await DAHelper.update( urivar, valuesBucket, da, );
-
調(diào)用query方法在指定的DataAbility子模塊中查找數(shù)據(jù)。
// callback方式調(diào)用: DAHelper.query( urivar, valArray, da, (error, data) => { console.info("DAHelper query result: " + data) } );
// promise方式調(diào)用(await需要在async方法中使用): let dataupdate = await DAHelper.update( urivar, valuesBucket, da, );
-
調(diào)用batchInsert方法向指定的DataAbility子模塊批量插入數(shù)據(jù)。
// callback方式調(diào)用: DAHelper.query( urivar, valArray, da, (error, data) => { console.info("DAHelper query result: " + data) } );
// promise方式調(diào)用(await需要在async方法中使用): let dataquery = await DAHelper.query( urivar, valArray, da );
-
調(diào)用executeBatch方法向指定的DataAbility子模塊進(jìn)行數(shù)據(jù)的批量處理。
// callback方式調(diào)用: DAHelper.executeBatch( urivar, [ { uri: urivar, type: featureAbility.DataAbilityOperationType.TYPE_INSERT, valuesBucket: {"executeBatch" : "value1",}, predicates: da, expectedCount:0, predicatesBackReferences: null, interrupted:true, } ], (error, data) => { console.info("DAHelper executeBatch result: " + data) } );
// promise方式調(diào)用(await需要在async方法中使用): let dataexecuteBatch = await DAHelper.executeBatch( urivar, [ { uri: urivar, type: featureAbility.DataAbilityOperationType.TYPE_INSERT, valuesBucket: { "executeBatch" : "value1", }, predicates: da, expectedCount:0, predicatesBackReferences: null, interrupted:true, } ] );
DataAbility的客戶端的接口是由工具接口類對象DataAbilityHelper向外提供,相關(guān)接口可參考DataAbilityHelper模塊。
DataAbility權(quán)限控制
DataAbility提供數(shù)據(jù)服務(wù),并不是所有的Ability都有權(quán)限讀寫它,DataAbility有一套權(quán)限控制機(jī)制來保證數(shù)據(jù)安全。分為靜態(tài)權(quán)限控制和動態(tài)權(quán)限控制兩部分。
靜態(tài)權(quán)限控制
DataAbility作為服務(wù)端,在被拉起的時(shí)候,會根據(jù)config.json里面配置的權(quán)限來進(jìn)行校驗(yàn),有"readPermission"、"writePermission"和"Permission"三個(gè)配置項(xiàng),可以不配或者為空。示例如下:
"abilities": [{
"srcPath": "DataAbility",
"name": ".DataAbility",
"icon": "$media:icon",
"srcLanguage": "ets",
"description": "$string:description_dataability",
"type": "data",
"visible": true,
"uri": "dataability://ohos.samples.etsdataability.DataAbility",
"readPermission":"ohos.permission.READ_CONTACTS",
"writePermission":"ohos.permission.WRITE_CONTACTS"
}]
客戶端在拉起DataAbility的時(shí)候,需要校驗(yàn)客戶端是否有權(quán)限拉起該DataAbility??蛻舳说臋?quán)限配置在config.json配置文件的"module"對象的"reqPermissions"對象中,示例如下:
{
"module": {
"reqPermissions":{
{
"name":"ohos.permission.READ_CONTACTS"
},
{
"name":"ohos.permission.WRITE_CONTACTS"
}
}
}
}
動態(tài)權(quán)限控制
靜態(tài)權(quán)限校驗(yàn)只能控制某個(gè)DataAbility是否能被另一個(gè)Ability或應(yīng)用拉起,無法精確校驗(yàn)每個(gè)讀寫接口的權(quán)限,因?yàn)槔餌ataAbility的時(shí)候,還不知道應(yīng)用是否需要讀寫它的數(shù)據(jù)。
動態(tài)權(quán)限控制是校驗(yàn)每個(gè)數(shù)據(jù)操作的接口是否有對應(yīng)的權(quán)限??蛻舳苏{(diào)用數(shù)據(jù)操作接口所需的權(quán)限如下表所示。
表1 接口對應(yīng)的讀寫權(quán)限配置
需要配置讀權(quán)限的接口 | 需要配置寫權(quán)限的接口 | 據(jù)實(shí)際操作配置讀寫權(quán)限的接口 |
---|---|---|
query、normalizeUri、denormalizeUri、openfile(傳入mode有’r’) | insert、batchInsert、delete、update、openfile(傳入mode有’w’) | executeBatch |
對于需要配置讀權(quán)限的接口,服務(wù)端需要配置readPermission,客戶端必須申請相應(yīng)的讀權(quán)限才能調(diào)用相關(guān)的接口。文章來源:http://www.zghlxwxcb.cn/news/detail-822939.html
對于需要配置寫權(quán)限的接口,服務(wù)端需要配置writePermission,客戶端必須申請相應(yīng)的寫權(quán)限才能調(diào)用相關(guān)的接口。文章來源地址http://www.zghlxwxcb.cn/news/detail-822939.html
到了這里,關(guān)于HarmonyOS4.0系統(tǒng)性深入開發(fā)25訪問DataAbility的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!