1# @ohos.application.DataShareExtensionAbility (数据共享扩展能力) 2 3**DataShareExtensionAbility**基于ExtensionAbility框架,提供支持数据共享业务的能力。 4 5>**说明:** 6> 7> 本模块首批接口从API version 9开始支持,后续版本的新增接口,采用上角标单独标记接口的起始版本。 8> 9> 本模块接口为系统接口。 10> 11> 本模块接口仅可在Stage模型下使用。 12 13 14## 导入模块 15 16```ts 17import DataShareExtensionAbility from '@ohos.application.DataShareExtensionAbility'; 18``` 19 20## 属性 21 22**系统能力**:SystemCapability.DistributedDataManager.DataShare.Provider 23 24| 名称 | 类型 | 可读 | 可写 | 说明 | 25| -------- | -------- | -------- | -------- | -------- | 26| context<sup>10+</sup> | [ExtensionContext](js-apis-inner-application-extensionContext.md) | 是 | 否 |表示数据共享扩展能力上下文。| 27 28## onCreate 29 30onCreate?(want: Want, callback: AsyncCallback<void>): void 31 32DataShare客户端连接DataShareExtensionAbility服务端时,服务端回调此接口,执行初始化业务逻辑操作。该方法可以选择性重写。 33 34**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider 35 36**参数:** 37 38| 参数名 | 类型 | 必填 | 说明 | 39| ----- | ------ | ------ | ------ | 40| want | [Want](js-apis-app-ability-want.md#want) | 是 | Want类型信息,包括Ability名称、Bundle名称等。 | 41| callback | AsyncCallback<void> | 是 | 回调函数。无返回值。 | 42 43**示例:** 44 45```ts 46import relationalStore from '@ohos.data.relationalStore' 47import Want from '@ohos.app.ability.Want' 48 49let DB_NAME = 'DB00.db'; 50let TBL_NAME = 'TBL00'; 51let DDL_TBL_CREATE = 'CREATE TABLE IF NOT EXISTS ' 52 + TBL_NAME 53 + ' (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, phoneNumber DOUBLE, isStudent BOOLEAN, Binary BINARY)'; 54let rdbStore: relationalStore.RdbStore; 55 56export default class DataShareExtAbility extends DataShareExtensionAbility { 57 onCreate(want: Want, callback: Function) { 58 relationalStore.getRdbStore(this.context, { 59 name: DB_NAME, 60 securityLevel: relationalStore.SecurityLevel.S1 61 }, (err, data) => { 62 console.info(`getRdbStore done, data : ${data}`); 63 rdbStore = data; 64 rdbStore.executeSql(DDL_TBL_CREATE, [], (err) => { 65 console.error(`executeSql done, error message : ${err}`); 66 }); 67 if (callback) { 68 callback(); 69 } 70 }); 71 } 72}; 73``` 74 75## insert 76 77insert?(uri: string, valueBucket: ValuesBucket, callback: AsyncCallback<number>): void 78 79在数据库插入时回调此接口,该方法可以选择性重写。 80 81**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider 82 83**参数:** 84 85| 参数名 | 类型 | 必填 | 说明 | 86| ----- | ------ | ------ | ------ | 87| uri |string | 是 | 指示要插入的数据的路径。 | 88| valueBucket |[ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket) | 是 | 指示要插入的数据。 | 89| callback |AsyncCallback<number> | 是 | 回调函数。返回插入数据记录的索引。 | 90 91**示例:** 92 93```ts 94import relationalStore from '@ohos.data.relationalStore' 95import { ValuesBucket } from '@ohos.data.ValuesBucket' 96 97let TBL_NAME = 'TBL00'; 98let rdbStore: relationalStore.RdbStore; 99 100export default class DataShareExtAbility extends DataShareExtensionAbility { 101 insert(uri: string, valueBucket: ValuesBucket, callback: Function) { 102 if (valueBucket === null) { 103 console.error('invalid valueBuckets'); 104 return; 105 } 106 rdbStore.insert(TBL_NAME, valueBucket, (err, ret) => { 107 console.info(`callback ret: ${ret}`); 108 if (callback !== undefined) { 109 callback(err, ret); 110 } 111 }); 112 } 113}; 114``` 115 116## update 117 118update?(uri: string, predicates: dataSharePredicates.DataSharePredicates, valueBucket: ValuesBucket, callback: AsyncCallback<number>): void 119 120在数据库更新时服务端回调此接口,该方法可以选择性重写。 121 122**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider 123 124**参数:** 125 126| 参数名 | 类型 | 必填 | 说明 | 127| ----- | ------ | ------ | ------ | 128| uri | string | 是 | 指示要更新的数据的路径。 | 129| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | 是 | 指示筛选条件。 | 130| valueBucket | [ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket) | 是 | 指示要更新的数据。 | 131| callback | AsyncCallback<number> | 是 | 回调函数。返回更新的数据记录数。 | 132 133**示例:** 134 135```ts 136import relationalStore from '@ohos.data.relationalStore'; 137import dataSharePredicates from '@ohos.data.dataSharePredicates'; 138import { ValuesBucket } from '@ohos.data.ValuesBucket' 139 140let TBL_NAME = 'TBL00'; 141let rdbStore: relationalStore.RdbStore; 142 143export default class DataShareExtAbility extends DataShareExtensionAbility { 144 update(uri: string, predicates: dataSharePredicates.DataSharePredicates, valueBucket: ValuesBucket, callback: Function) { 145 if (predicates === null || predicates === undefined) { 146 return; 147 } 148 rdbStore.update(TBL_NAME, valueBucket, predicates, (err, ret) => { 149 if (callback !== undefined) { 150 callback(err, ret); 151 } 152 }); 153 } 154}; 155``` 156 157## delete 158 159delete?(uri: string, predicates: dataSharePredicates.DataSharePredicates, callback: AsyncCallback<number>): void 160 161在删除数据库记录时服务端回调此接口,该方法可以选择性重写。 162 163**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider 164 165**参数:** 166 167| 参数名 | 类型 | 必填 | 说明 | 168| ---------- | ------------------------------------------------------------ | ---- | ---------------------------------- | 169| uri | string | 是 | 指示要删除的数据的路径。 | 170| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | 是 | 指示筛选条件。 | 171| callback | AsyncCallback<number> | 是 | 回调函数。返回已删除的数据记录数。 | 172 173**示例:** 174 175```ts 176import relationalStore from '@ohos.data.relationalStore'; 177import dataSharePredicates from '@ohos.data.dataSharePredicates'; 178 179let TBL_NAME = 'TBL00'; 180let rdbStore: relationalStore.RdbStore; 181 182export default class DataShareExtAbility extends DataShareExtensionAbility { 183 delete(uri: string, predicates: dataSharePredicates.DataSharePredicates, callback: Function) { 184 if (predicates === null || predicates === undefined) { 185 return; 186 } 187 rdbStore.delete(TBL_NAME, predicates, (err, ret) => { 188 if (callback !== undefined) { 189 callback(err, ret); 190 } 191 }); 192 } 193}; 194``` 195 196## query 197 198query?(uri: string, predicates: dataSharePredicates.DataSharePredicates, columns: Array<string>, callback: AsyncCallback<Object>): void 199 200在查询数据库时服务端回调此接口,该方法可以选择性重写。 201 202**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider 203 204**参数:** 205 206| 参数名 | 类型 | 必填 | 说明 | 207| ----- | ------ | ------ | ------ | 208| uri | string | 是 | 指示要查询的数据的路径。 | 209| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | 是 | 指示筛选条件。 | 210| columns | Array<string> | 是 | 指示要查询的列。如果此参数为空,则查询所有列。 | 211| callback | AsyncCallback<Object> | 是 | 回调函数。返回查询到的结果集。 | 212 213**示例:** 214 215```ts 216import relationalStore from '@ohos.data.relationalStore'; 217import dataSharePredicates from '@ohos.data.dataSharePredicates'; 218 219let TBL_NAME = 'TBL00'; 220let rdbStore: relationalStore.RdbStore; 221 222export default class DataShareExtAbility extends DataShareExtensionAbility { 223 query(uri: string, predicates: dataSharePredicates.DataSharePredicates, columns: Array<string>, callback: Function) { 224 if (predicates === null || predicates === undefined) { 225 return; 226 } 227 rdbStore.query(TBL_NAME, predicates, columns, (err, resultSet) => { 228 if (resultSet !== undefined) { 229 console.info(`resultSet.rowCount: ${resultSet.rowCount}`); 230 } 231 if (callback !== undefined) { 232 callback(err, resultSet); 233 } 234 }); 235 } 236}; 237``` 238 239## batchInsert 240 241batchInsert?(uri: string, valueBuckets: Array<ValuesBucket>, callback: AsyncCallback<number>): void 242 243在数据库批量插入时服务端回调此接口,该方法可以选择性重写。 244 245**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider 246 247**参数:** 248 249| 参数名 | 类型 | 必填 | 说明 | 250| ------------ | ------------------------------------------------------------ | ---- | -------------------------------- | 251| uri | string | 是 | 指示要批量插入的数据的路径。 | 252| valueBuckets | Array<[ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket)> | 是 | 指示要批量插入的数据。 | 253| callback | AsyncCallback<number> | 是 | 回调函数。返回插入的数据记录数。 | 254 255**示例:** 256 257```ts 258import relationalStore from '@ohos.data.relationalStore'; 259import { ValuesBucket } from '@ohos.data.ValuesBucket' 260 261let TBL_NAME = 'TBL00'; 262let rdbStore: relationalStore.RdbStore; 263 264export default class DataShareExtAbility extends DataShareExtensionAbility { 265 batchInsert(uri: string, valueBuckets: Array<ValuesBucket>, callback: Function) { 266 if (valueBuckets === null || valueBuckets.length === undefined) { 267 console.error('invalid valueBuckets'); 268 return; 269 } 270 rdbStore.batchInsert(TBL_NAME, valueBuckets, (err, ret) => { 271 if (callback !== undefined) { 272 callback(err, ret); 273 } 274 }); 275 }; 276}; 277``` 278 279## normalizeUri 280 281normalizeUri?(uri: string, callback: AsyncCallback<string>): void 282 283用户给定的URI转换为服务端使用的URI时回调此接口,该方法可以选择性重写。 284 285**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider 286 287**参数:** 288 289| 参数名 | 类型 | 必填 | 说明 | 290| -------- | --------------------- | ---- | ----------------------- | 291| uri | string | 是 | 指示用户传入的[URI](js-apis-uri.md#uri)。 | 292| callback | AsyncCallback<string> | 是 | 回调函数。如果支持URI规范化,则返回规范化URI,否则返回空。 | 293 294**示例:** 295 296```ts 297import { BusinessError } from '@ohos.base' 298 299export default class DataShareExtAbility extends DataShareExtensionAbility { 300 normalizeUri(uri: string, callback: Function) { 301 let key = 'code'; 302 let value = 0; 303 let err: BusinessError = { 304 code: value, 305 name: key, 306 message: key 307 }; 308 let ret: string = `normalize: ${uri}`; 309 callback(err, ret); 310 } 311}; 312``` 313 314## denormalizeUri 315 316denormalizeUri?(uri: string, callback: AsyncCallback<string>): void 317 318服务端使用的URI转换为用户传入的初始URI时服务端回调此接口,该方法可以选择性重写。 319 320**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider 321 322**参数:** 323 324| 参数名 | 类型 | 必填 | 说明 | 325| -------- | --------------------- | ---- | ----------------------- | 326| uri | string | 是 | 指示服务端使用的[URI](js-apis-uri.md#uri)。 | 327| callback | AsyncCallback<string> | 是 | 回调函数。如果反规范化成功,则返回反规范化的URI;如果无需进行反规范化,则返回原始URI;若不支持则返回空。 | 328 329**示例:** 330 331```ts 332import { BusinessError } from '@ohos.base' 333 334export default class DataShareExtAbility extends DataShareExtensionAbility { 335 denormalizeUri(uri: string, callback: Function) { 336 let key = 'code'; 337 let value = 0; 338 let err: BusinessError = { 339 code: value, 340 name: key, 341 message: key 342 }; 343 let ret = `denormalize ${uri}`; 344 callback(err, ret); 345 } 346}; 347``` 348