基于Native的Data Ability创建与访问

Data Ability基本概念

通过Ability派生出的DataAbility类(以下简称“Data”),有助于应用管理其自身和其他应用存储数据的访问,并提供与其他应用共享数据的方法。Data既可用于同设备不同应用的数据共享,也支持跨设备不同应用的数据共享。

创建Data

1. Data子系统实现

  1. 基于Native的Data子系统,需要继承Ability类,成为Ability的派生类来实现功能
  2. 需要实现父类中Insert,Query,Update,Delete接口的业务内容.保证能够满足数据库存储业务的基本需求.BatchInsert与ExecuteBatch接口已经在系统中实现遍历逻辑,依赖Insert,Query,Update,Delete接口逻辑,来实现数据的批量处理.
  3. 使用REGISTER_AA宏将Data的类名注册到系统服务中

2. 子系统配置

Json重要字段 备注说明
“name” Ability名子,对应Ability派生的Data类名
“type” Ability类型,Data对应的Ability类型未”data”
“uri” 通信使用的URI
“srcLanguage” Data实现语言,c++实现的Data填写c++, js实现的Data填写js
“visible” 对其他应用是否可见, 设置为true时, Data才能与其他应用进行通信传输数据

config.json配置样例

  1. "abilities":[{
  2. "name": ".DataAbility",
  3. "icon": "$media:snowball",
  4. "label": "Data Firs Ability",
  5. "launchType": "standard",
  6. "orientation": "unspecified",
  7. "type": "data",
  8. "uri": "dataability://com.ix.DataAbility",
  9. "srcLanguage": "c++",
  10. "visible": true
  11. }]

访问Data

1 JS应用开发前准备

基础依赖包:

  1. 1. @ohos.ability.featureAbility
  2. 2. @ohos.data.dataability
  3. 3. @ohos.data.rdb

与Data子系统通信的Uri字符串

2 JS应用开发接口

工具接口类对象创建

  1. // 作为参数传递的Uri,与config中定义的Uri的区别是多了一个"/",是因为作为参数传递的uri中,在第二个与第三个"/"中间,存在一个DeviceID的参数
  2. var urivar = "dataability:///com.ix.DataAbility"
  3. var DAHelper = featureAbility.acquireDataAbilityHelper(
  4. urivar
  5. );

数据库相关的rdb数据构建

  1. var valuesBucket = {"name": "gaolu"}
  2. var da = new ohos_data_ability.DataAbilityPredicates()
  3. var valArray =new Array("value1");
  4. var cars = new Array({"batchInsert1" : "value1",});

向指定的Data子系统插入数据,inster调用

  1. // callbacke方式调用:
  2. DAHelper.insert(
  3. urivar,
  4. valuesBucket,
  5. (error, data) => {
  6. expect(typeof(data)).assertEqual("number")
  7. }
  8. );
  9. // promise方式调用:
  10. var datainsert = await DAHelper.insert(
  11. urivar,
  12. valuesBucket
  13. );

删除Data子系统中指定的数据, delete调用

  1. // callbacke方式调用:
  2. DAHelper.delete(
  3. urivar,
  4. da,
  5. (error, data) => {
  6. expect(typeof(data)).assertEqual("number")
  7. }
  8. );
  9. // promise方式调用:
  10. var datadelete = await DAHelper.delete(
  11. urivar,
  12. da,
  13. );

更新指定Data子系统中的数据, update调用

  1. // callbacke方式调用:
  2. DAHelper.update(
  3. urivar
  4. valuesBucket,
  5. da,
  6. (error, data) => {
  7. expect(typeof(data)).assertEqual("number")
  8. }
  9. );
  10. // promise方式调用:
  11. var dataupdate = await DAHelper.update(
  12. urivar,
  13. valuesBucket,
  14. da,
  15. );

在指定的Data子系统中查找数据,query调用

  1. // callbacke方式调用:
  2. DAHelper.query(
  3. urivar,
  4. valArray,
  5. da,
  6. (error, data) => {
  7. expect(typeof(data)).assertEqual("object")
  8. }
  9. );
  10. // promise方式调用:
  11. var dataquery = await DAHelper.query(
  12. urivar,
  13. valArray,
  14. da
  15. );

向指定的数据子系统批量插入数据,batchInsert调用

  1. // callbacke方式调用:
  2. DAHelper.batchInsert(
  3. urivar,
  4. cars,
  5. (error, data) => {
  6. expect(typeof(data)).assertEqual("number")
  7. }
  8. );
  9. // promise方式调用:
  10. var databatchInsert = await DAHelper.batchInsert(
  11. urivar,
  12. cars
  13. );

向指定的Data子系统进行数据的批量处理,executeBatch调用

  1. // callbacke方式调用:
  2. DAHelper.executeBatch(
  3. urivar,
  4. [
  5. {
  6. uri: urivar,
  7. type: featureAbility.DataAbilityOperationType.TYPE_INSERT,
  8. valuesBucket: {"executeBatch" : "value1",},
  9. predicates: da,
  10. expectedCount:0,
  11. PredicatesBackReferences: {},
  12. interrupted:true,
  13. }
  14. ],
  15. (error, data) => {
  16. expect(typeof(data)).assertEqual("object")
  17. }
  18. );
  19. // promise方式调用:
  20. var dataexecuteBatch = await DAHelper.executeBatch(
  21. urivar,
  22. [
  23. {
  24. uri: urivar,
  25. type: featureAbility.DataAbilityOperationType.TYPE_INSERT,
  26. valuesBucket:
  27. {
  28. "executeBatch" : "value1",
  29. },
  30. predicates: da,
  31. expectedCount:0,
  32. PredicatesBackReferences: {},
  33. interrupted:true,
  34. }
  35. ]
  36. );