diff --git a/zh-cn/application-dev/database/database-datashare-guidelines.md b/zh-cn/application-dev/database/database-datashare-guidelines.md index 28744b714ddfb827802d5d2ed07f9fa5ae23e2b8..79a62d26f23f7d3dfa71f5ea97a9561bd3646c06 100644 --- a/zh-cn/application-dev/database/database-datashare-guidelines.md +++ b/zh-cn/application-dev/database/database-datashare-guidelines.md @@ -1,7 +1,5 @@ # DataShare开发指导 -DataShare,可以用于应用管理其自身数据,并支持同个设备上不同应用间的数据共享。 - -DataShare可分为数据的提供方和访问方两部分,提供方可以选择性实现数据的增、删、改、查,以及文件打开等功能,并对外共享这些数据。访问方利用工具类,便可以访问提供方提供的这些数据。 +DataShare即数据共享模块,提供了向其他应用共享以及管理其数据的方法。目前仅支持同个设备上应用之间的数据共享。 ## 接口说明 @@ -31,21 +29,29 @@ DataShare可分为数据的提供方和访问方两部分,提供方可以选 ## 开发场景 -### 数据提供方应用的开发(仅限系统应用) +数据共享可分为数据的提供方和访问方两部分。 + +- 提供方可以选择性实现数据的增、删、改、查,以及文件打开等功能,并对外共享这些数据。 +- 访问方利用工具类,便可以访问提供方提供的这些数据。 -1. 数据提供方(也称服务端)继承于DataShareExtensionAbility,开发者可根据应用需求选择性重写其业务实现。例如数据提供方只提供查询服务,则可只重写查询接口。 +以下是数据提供方和数据访问方应用的各自开发示例。 -2. 数据提供方的业务实现由开发者自定义。例如可以通过数据库、读写文件或访问网络等各方式实现数据提供方的数据存储。 +### 数据提供方应用的开发(仅限系统应用) - 创建数据提供方的代码示例如下: +1. 导入基础依赖包。 ```ts import Extension from '@ohos.application.DataShareExtensionAbility' import rdb from '@ohos.data.rdb'; import fileIo from '@ohos.fileio' import dataSharePredicates from '@ohos.data.dataSharePredicates' - - + ``` + +2. 数据提供方(也称服务端)继承于DataShareExtensionAbility,开发者可根据应用需求选择性重写其业务实现。例如数据提供方只提供查询服务,则可只重写查询接口。 + +3. 数据提供方的业务实现由开发者自定义。例如可以通过数据库、读写文件或访问网络等各方式实现数据提供方的数据存储。 + + ```ts let DB_NAME = "DB00.db"; let TBL_NAME = "TBL00"; let DDL_TBL_CREATE = "CREATE TABLE IF NOT EXISTS " @@ -57,9 +63,11 @@ DataShare可分为数据的提供方和访问方两部分,提供方可以选 export default class DataShareExtAbility extends Extension { private rdbStore_; - + + // 重写onCreate接口 onCreate(want, callback) { result = this.context.cacheDir + '/datashare.txt' + // 业务实现使用RDB rdb.getRdbStore(this.context, { name: DB_NAME }, 1, function (err, data) { @@ -71,54 +79,7 @@ DataShare可分为数据的提供方和访问方两部分,提供方可以选 }); } - insert(uri, value, callback) { - if (value == null) { - console.info('invalid valueBuckets'); - return; - } - rdbStore.insert(TBL_NAME, value, function (err, ret) { - console.info('callback ret:' + ret); - if (callback != undefined) { - callback(err, ret); - } - }); - } - - update(uri, predicates, value, callback) { - if (predicates == null || predicates == undefined) { - console.info('invalid predicates'); - return; - } - try { - rdbStore.update(TBL_NAME,value, predicates, function (err, ret) { - console.info('callback ret:' + ret); - console.info('callback err:' + err); - if (callback != undefined) { - callback(err, ret); - } - }); - } catch (err) { - console.error('error' + err); - } - } - - delete(uri, predicates, callback) { - if (predicates == null || predicates == undefined) { - console.info('invalid predicates'); - return; - } - try { - rdbStore.delete(TBL_NAME,predicates, function (err, ret) { - console.info('ret:' + ret); - if (callback != undefined) { - callback(err, ret); - } - }); - } catch (err) { - console.error('error' + err); - } - } - + // 重写query接口 query(uri, predicates, columns, callback) { if (predicates == null || predicates == undefined) { console.info('invalid predicates'); @@ -136,21 +97,23 @@ DataShare可分为数据的提供方和访问方两部分,提供方可以选 console.error('error' + err); } } + // 可根据应用需求,选择性重写各个接口 + // ... }; ``` -3. 子模块配置 +4. 在module.json5中定义DataShareExtensionAbility。 | Json重要字段 | 备注说明 | | ------------ | ------------------------------------------------------------ | - | "name" | Ability名称,对应Ability派生的extension类名。 | + | "name" | Ability名称,对应Ability派生的ExtensionAbility类名。 | | "type" | Ability类型,DataShare对应的Ability类型为”dataShare“,表示基于datashare模板开发的。 | - | "uri" | 通信使用的URI。 | + | "uri" | 通信使用的URI,是客户端链接服务端的唯一标识。 | | "visible" | 对其他应用是否可见,设置为true时,才能与其他应用进行通信传输数据。 | **module.json5配置样例** - ```ts + ```json "extensionAbilities": [ { "srcEntrance": "./ets/DataShareExtAbility/DataShareExtAbility.ts", @@ -166,32 +129,26 @@ DataShare可分为数据的提供方和访问方两部分,提供方可以选 ### 数据访问方应用的开发 -1. 导入基础依赖包,以及获取与数据提供方通信的URI字符串。 - - 其中,基础依赖包包括: +1. 导入基础依赖包。 ```ts - // 作为参数传递的URI,与module.json5中定义的URI的区别是多了一个"/",是因为作为参数传递的URI中,在第二个与第三个"/"中间,存在一个DeviceID的参数 import Ability from '@ohos.application.Ability' import dataShare from '@ohos.data.dataShare' import dataSharePredicates from '@ohos.data.dataSharePredicates' - - let dsHelper; - let abilityContext; - let dseUri = ("datashare:///com.samples.datasharetest.DataShare"); ``` 2. 定义与数据提供方通信的URI字符串。 ```ts - let dsHelper; - let abilityContext; + // 作为参数传递的URI,与module.json5中定义的URI的区别是多了一个"/",是因为作为参数传递的URI中,在第二个与第三个"/"中间,存在一个DeviceID的参数 let dseUri = ("datashare:///com.samples.datasharetest.DataShare"); ``` 2. 创建工具接口类对象。 ```ts + let dsHelper; + let abilityContext; export default class MainAbility extends Ability { onWindowStageCreate(windowStage) { abilityContext = this.context; @@ -214,60 +171,21 @@ DataShare可分为数据的提供方和访问方两部分,提供方可以选 {"name": "LiSi", "age": 41, "Binary": ar}, {"name": "WangWu", "age": 21, "Binary": arr}, {"name": "ZhaoLiu", "age": 61, "Binary": arr}); - ``` - - ```ts - // 插入一条数据,callback方式调用: + // 插入一条数据 dsHelper.insert(dseUri, valuesBucket, (err,data) => { console.log("dsHelper insert result: " + data); }); - ``` - - ```ts - // 插入一条数据,promise方式调用: - let ret = await dsHelper.insert(dseUri, valuesBucket); - ``` - - ```ts - // 删除指定的数据,callback方式调用: + // 删除指定的数据 dsHelper.delete(dseUri, da, (err,data) => { console.log("dsHelper delete result: " + data); }); - ``` - - ```ts - // 删除指定的数据,promise方式调用: - let ret = await dsHelper.delete(dseUri, da); - ``` - - ```ts - // 更新数据,callback方式调用: + // 更新数据 dsHelper.update(dseUri, da, updateBucket, (err,data) => { console.log("dsHelper update result: " + data); }); - ``` - - ```ts - // 更新数据,promise方式调用: - let ret = await dsHelper.update(dseUri, da, updateBucket); - ``` - - ```ts - // 查询数据,callback方式调用: + // 查询数据 dsHelper.query(dseUri, da, valArray, (err,data) => { console.log("dsHelper query result: " + data); }); ``` - - ```ts - // 查询数据,promise方式调用: - let result = await dsHelper.query(dseUri, da, valArray); - ``` - -## 相关实例 - -针对DataShare开发,有以下相关实例可供参考: - -待补充。 - -- [`DataShare`:DataShare的创建与访问(eTS)(API9)](https://gitee.com/openharmony/app_samples/tree/master/ability/DataAbility) +