1e41f4b71Sopenharmony_ci# @ohos.application.DataShareExtensionAbility (DataShare ExtensionAbility) (System API) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciThe **DataShareExtensionAbility** module provides data share services based on the ExtensionAbility. 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci>**NOTE** 6e41f4b71Sopenharmony_ci> 7e41f4b71Sopenharmony_ci> - The initial APIs of this module are supported since API version 9. Newly added APIs will be marked with a superscript to indicate their earliest API version. 8e41f4b71Sopenharmony_ci> 9e41f4b71Sopenharmony_ci> - The APIs provided by this module are system APIs. 10e41f4b71Sopenharmony_ci> 11e41f4b71Sopenharmony_ci> - The APIs of this module can be used only in the stage model. 12e41f4b71Sopenharmony_ci 13e41f4b71Sopenharmony_ci 14e41f4b71Sopenharmony_ci## Modules to Import 15e41f4b71Sopenharmony_ci 16e41f4b71Sopenharmony_ci```ts 17e41f4b71Sopenharmony_ciimport { DataShareExtensionAbility } from '@kit.ArkData'; 18e41f4b71Sopenharmony_ci``` 19e41f4b71Sopenharmony_ci 20e41f4b71Sopenharmony_ci## Properties 21e41f4b71Sopenharmony_ci 22e41f4b71Sopenharmony_ci**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci| Name| Type| Readable| Writable| Description| 25e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | -------- | 26e41f4b71Sopenharmony_ci| context<sup>10+</sup> | [ExtensionContext](../apis-ability-kit/js-apis-inner-application-extensionContext.md) | Yes| No|Context of the DataShare ExtensionAbility.| 27e41f4b71Sopenharmony_ci 28e41f4b71Sopenharmony_ci## onCreate 29e41f4b71Sopenharmony_ci 30e41f4b71Sopenharmony_cionCreate?(want: Want, callback: AsyncCallback<void>): void 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ciCalled by the server to initialize service logic when the DataShare client connects to the DataShareExtensionAbility server. This API can be overridden as required. 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider 35e41f4b71Sopenharmony_ci 36e41f4b71Sopenharmony_ci**Parameters** 37e41f4b71Sopenharmony_ci 38e41f4b71Sopenharmony_ci| Name| Type| Mandatory| Description| 39e41f4b71Sopenharmony_ci| ----- | ------ | ------ | ------ | 40e41f4b71Sopenharmony_ci| want | [Want](../apis-ability-kit/js-apis-app-ability-want.md#want) | Yes | Want information, including the ability name and bundle name.| 41e41f4b71Sopenharmony_ci| callback | AsyncCallback<void> | Yes| Callback that returns no value.| 42e41f4b71Sopenharmony_ci 43e41f4b71Sopenharmony_ci**Example** 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ci```ts 46e41f4b71Sopenharmony_ciimport { DataShareExtensionAbility, relationalStore } from '@kit.ArkData'; 47e41f4b71Sopenharmony_ciimport { Want } from '@kit.AbilityKit'; 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_cilet DB_NAME = 'DB00.db'; 50e41f4b71Sopenharmony_cilet TBL_NAME = 'TBL00'; 51e41f4b71Sopenharmony_cilet DDL_TBL_CREATE = 'CREATE TABLE IF NOT EXISTS ' 52e41f4b71Sopenharmony_ci + TBL_NAME 53e41f4b71Sopenharmony_ci + ' (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, phoneNumber DOUBLE, isStudent BOOLEAN, Binary BINARY)'; 54e41f4b71Sopenharmony_cilet rdbStore: relationalStore.RdbStore; 55e41f4b71Sopenharmony_ci 56e41f4b71Sopenharmony_ciexport default class DataShareExtAbility extends DataShareExtensionAbility { 57e41f4b71Sopenharmony_ci onCreate(want: Want, callback: Function) { 58e41f4b71Sopenharmony_ci relationalStore.getRdbStore(this.context, { 59e41f4b71Sopenharmony_ci name: DB_NAME, 60e41f4b71Sopenharmony_ci securityLevel: relationalStore.SecurityLevel.S3 61e41f4b71Sopenharmony_ci }, (err, data) => { 62e41f4b71Sopenharmony_ci console.info(`getRdbStore done, data : ${data}`); 63e41f4b71Sopenharmony_ci rdbStore = data; 64e41f4b71Sopenharmony_ci rdbStore.executeSql(DDL_TBL_CREATE, [], (err) => { 65e41f4b71Sopenharmony_ci console.error(`executeSql done, error message : ${err}`); 66e41f4b71Sopenharmony_ci }); 67e41f4b71Sopenharmony_ci if (callback) { 68e41f4b71Sopenharmony_ci callback(); 69e41f4b71Sopenharmony_ci } 70e41f4b71Sopenharmony_ci }); 71e41f4b71Sopenharmony_ci } 72e41f4b71Sopenharmony_ci}; 73e41f4b71Sopenharmony_ci``` 74e41f4b71Sopenharmony_ci 75e41f4b71Sopenharmony_ci## UpdateOperation<sup>12+</sup> 76e41f4b71Sopenharmony_ci 77e41f4b71Sopenharmony_ciRepresents the batch update operation information. 78e41f4b71Sopenharmony_ci 79e41f4b71Sopenharmony_ci**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider 80e41f4b71Sopenharmony_ci 81e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 82e41f4b71Sopenharmony_ci| --------------- | ------------------------------------------------------------ | ---- | -------------- | 83e41f4b71Sopenharmony_ci| UpdateOperation | [dataShare.UpdateOperation](js-apis-data-dataShare-sys.md#updateoperation12) | Yes | Data to update.| 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci## insert 86e41f4b71Sopenharmony_ci 87e41f4b71Sopenharmony_ciinsert?(uri: string, valueBucket: ValuesBucket, callback: AsyncCallback<number>): void 88e41f4b71Sopenharmony_ci 89e41f4b71Sopenharmony_ciInserts data into the database. This API can be overridden as required. 90e41f4b71Sopenharmony_ci 91e41f4b71Sopenharmony_ci**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider 92e41f4b71Sopenharmony_ci 93e41f4b71Sopenharmony_ci**Parameters** 94e41f4b71Sopenharmony_ci 95e41f4b71Sopenharmony_ci| Name| Type| Mandatory| Description| 96e41f4b71Sopenharmony_ci| ----- | ------ | ------ | ------ | 97e41f4b71Sopenharmony_ci| uri |string | Yes | URI of the data to insert.| 98e41f4b71Sopenharmony_ci| valueBucket |[ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket) | Yes| Data to insert.| 99e41f4b71Sopenharmony_ci| callback |AsyncCallback<number> | Yes| Callback used to return the index of the data inserted.| 100e41f4b71Sopenharmony_ci 101e41f4b71Sopenharmony_ci**Example** 102e41f4b71Sopenharmony_ci 103e41f4b71Sopenharmony_ci```ts 104e41f4b71Sopenharmony_ciimport { DataShareExtensionAbility, relationalStore, ValuesBucket } from '@kit.ArkData'; 105e41f4b71Sopenharmony_ci 106e41f4b71Sopenharmony_cilet TBL_NAME = 'TBL00'; 107e41f4b71Sopenharmony_cilet rdbStore: relationalStore.RdbStore; 108e41f4b71Sopenharmony_ci 109e41f4b71Sopenharmony_ciexport default class DataShareExtAbility extends DataShareExtensionAbility { 110e41f4b71Sopenharmony_ci insert(uri: string, valueBucket: ValuesBucket, callback: Function) { 111e41f4b71Sopenharmony_ci if (valueBucket === null) { 112e41f4b71Sopenharmony_ci console.error('invalid valueBuckets'); 113e41f4b71Sopenharmony_ci return; 114e41f4b71Sopenharmony_ci } 115e41f4b71Sopenharmony_ci rdbStore.insert(TBL_NAME, valueBucket, (err, ret) => { 116e41f4b71Sopenharmony_ci console.info(`callback ret: ${ret}`); 117e41f4b71Sopenharmony_ci if (callback !== undefined) { 118e41f4b71Sopenharmony_ci callback(err, ret); 119e41f4b71Sopenharmony_ci } 120e41f4b71Sopenharmony_ci }); 121e41f4b71Sopenharmony_ci } 122e41f4b71Sopenharmony_ci}; 123e41f4b71Sopenharmony_ci``` 124e41f4b71Sopenharmony_ci 125e41f4b71Sopenharmony_ci## update 126e41f4b71Sopenharmony_ci 127e41f4b71Sopenharmony_ciupdate?(uri: string, predicates: dataSharePredicates.DataSharePredicates, valueBucket: ValuesBucket, callback: AsyncCallback<number>): void 128e41f4b71Sopenharmony_ci 129e41f4b71Sopenharmony_ciUpdates data in the database. This API can be overridden as required. 130e41f4b71Sopenharmony_ci 131e41f4b71Sopenharmony_ci**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider 132e41f4b71Sopenharmony_ci 133e41f4b71Sopenharmony_ci**Parameters** 134e41f4b71Sopenharmony_ci 135e41f4b71Sopenharmony_ci| Name| Type| Mandatory| Description| 136e41f4b71Sopenharmony_ci| ----- | ------ | ------ | ------ | 137e41f4b71Sopenharmony_ci| uri | string | Yes | URI of the data to update.| 138e41f4b71Sopenharmony_ci| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | Yes | Filter criteria for updating data.| 139e41f4b71Sopenharmony_ci| valueBucket | [ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket) | Yes| New data.| 140e41f4b71Sopenharmony_ci| callback | AsyncCallback<number> | Yes| Callback used to return the number of updated data records.| 141e41f4b71Sopenharmony_ci 142e41f4b71Sopenharmony_ci**Example** 143e41f4b71Sopenharmony_ci 144e41f4b71Sopenharmony_ci```ts 145e41f4b71Sopenharmony_ciimport { DataShareExtensionAbility, relationalStore, dataSharePredicates, ValuesBucket } from '@kit.ArkData'; 146e41f4b71Sopenharmony_ci 147e41f4b71Sopenharmony_cilet TBL_NAME = 'TBL00'; 148e41f4b71Sopenharmony_cilet rdbStore: relationalStore.RdbStore; 149e41f4b71Sopenharmony_ci 150e41f4b71Sopenharmony_ciexport default class DataShareExtAbility extends DataShareExtensionAbility { 151e41f4b71Sopenharmony_ci update(uri: string, predicates: dataSharePredicates.DataSharePredicates, valueBucket: ValuesBucket, callback: Function) { 152e41f4b71Sopenharmony_ci if (predicates === null || predicates === undefined) { 153e41f4b71Sopenharmony_ci return; 154e41f4b71Sopenharmony_ci } 155e41f4b71Sopenharmony_ci rdbStore.update(TBL_NAME, valueBucket, predicates, (err, ret) => { 156e41f4b71Sopenharmony_ci if (callback !== undefined) { 157e41f4b71Sopenharmony_ci callback(err, ret); 158e41f4b71Sopenharmony_ci } 159e41f4b71Sopenharmony_ci }); 160e41f4b71Sopenharmony_ci } 161e41f4b71Sopenharmony_ci}; 162e41f4b71Sopenharmony_ci``` 163e41f4b71Sopenharmony_ci 164e41f4b71Sopenharmony_ci## batchUpdate<sup>12+</sup> 165e41f4b71Sopenharmony_ci 166e41f4b71Sopenharmony_cibatchUpdate?( operations: Record<string, Array<UpdateOperation>> , callback: AsyncCallback<Record<string, Array<number>>>): void 167e41f4b71Sopenharmony_ci 168e41f4b71Sopenharmony_ciBatch updates data into the database. This API is called by the server and can be overridden as required. 169e41f4b71Sopenharmony_ci 170e41f4b71Sopenharmony_ci**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider 171e41f4b71Sopenharmony_ci 172e41f4b71Sopenharmony_ci**Parameters** 173e41f4b71Sopenharmony_ci 174e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 175e41f4b71Sopenharmony_ci| ---------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------ | 176e41f4b71Sopenharmony_ci| operations | Record<string, Array<[UpdateOperation](#updateoperation12)>> | Yes | Collection of the path of the data to update, update conditions, and new data. | 177e41f4b71Sopenharmony_ci| callback | AsyncCallback<Record<string, Array<number>>> | Yes | Callback used to return an array of updated data records. The value **-1** means the update operation fails.| 178e41f4b71Sopenharmony_ci 179e41f4b71Sopenharmony_ci**Example** 180e41f4b71Sopenharmony_ci 181e41f4b71Sopenharmony_ci```ts 182e41f4b71Sopenharmony_ciimport { DataShareExtensionAbility, relationalStore, dataShare } from '@kit.ArkData'; 183e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit' 184e41f4b71Sopenharmony_ci 185e41f4b71Sopenharmony_cilet TBL_NAME = 'TBL00'; 186e41f4b71Sopenharmony_cilet rdbStore: relationalStore.RdbStore; 187e41f4b71Sopenharmony_ci 188e41f4b71Sopenharmony_ciexport default class DataShareExtAbility extends DataShareExtensionAbility { 189e41f4b71Sopenharmony_ci batchUpdate(operations:Record<string, Array<dataShare.UpdateOperation>>, callback:Function) { 190e41f4b71Sopenharmony_ci let recordOps : Record<string, Array<dataShare.UpdateOperation>> = operations; 191e41f4b71Sopenharmony_ci let results : Record<string, Array<number>> = {}; 192e41f4b71Sopenharmony_ci let a = Object.entries(recordOps); 193e41f4b71Sopenharmony_ci for (let i = 0; i < a.length; i++) { 194e41f4b71Sopenharmony_ci let key = a[i][0]; 195e41f4b71Sopenharmony_ci let values = a[i][1]; 196e41f4b71Sopenharmony_ci let result : number[] = []; 197e41f4b71Sopenharmony_ci for (const value of values) { 198e41f4b71Sopenharmony_ci rdbStore.update(TBL_NAME, value.values, value.predicates).then(async (rows) => { 199e41f4b71Sopenharmony_ci console.info('Update row count is ' + rows); 200e41f4b71Sopenharmony_ci result.push(rows); 201e41f4b71Sopenharmony_ci }).catch((err:BusinessError) => { 202e41f4b71Sopenharmony_ci console.info('Update failed, err is ' + JSON.stringify(err)); 203e41f4b71Sopenharmony_ci result.push(-1) 204e41f4b71Sopenharmony_ci }) 205e41f4b71Sopenharmony_ci } 206e41f4b71Sopenharmony_ci results[key] = result; 207e41f4b71Sopenharmony_ci } 208e41f4b71Sopenharmony_ci callback(null, results); 209e41f4b71Sopenharmony_ci } 210e41f4b71Sopenharmony_ci}; 211e41f4b71Sopenharmony_ci``` 212e41f4b71Sopenharmony_ci 213e41f4b71Sopenharmony_ci## delete 214e41f4b71Sopenharmony_ci 215e41f4b71Sopenharmony_cidelete?(uri: string, predicates: dataSharePredicates.DataSharePredicates, callback: AsyncCallback<number>): void 216e41f4b71Sopenharmony_ci 217e41f4b71Sopenharmony_ciDeletes data from the database. This API can be overridden as required. 218e41f4b71Sopenharmony_ci 219e41f4b71Sopenharmony_ci**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider 220e41f4b71Sopenharmony_ci 221e41f4b71Sopenharmony_ci**Parameters** 222e41f4b71Sopenharmony_ci 223e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 224e41f4b71Sopenharmony_ci| ---------- | ------------------------------------------------------------ | ---- | ---------------------------------- | 225e41f4b71Sopenharmony_ci| uri | string | Yes | URI of the data to delete. | 226e41f4b71Sopenharmony_ci| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | Yes | Filter criteria for deleting data. | 227e41f4b71Sopenharmony_ci| callback | AsyncCallback<number> | Yes | Callback used to return the number of data records deleted.| 228e41f4b71Sopenharmony_ci 229e41f4b71Sopenharmony_ci**Example** 230e41f4b71Sopenharmony_ci 231e41f4b71Sopenharmony_ci```ts 232e41f4b71Sopenharmony_ciimport { DataShareExtensionAbility, relationalStore, dataSharePredicates } from '@kit.ArkData'; 233e41f4b71Sopenharmony_ci 234e41f4b71Sopenharmony_cilet TBL_NAME = 'TBL00'; 235e41f4b71Sopenharmony_cilet rdbStore: relationalStore.RdbStore; 236e41f4b71Sopenharmony_ci 237e41f4b71Sopenharmony_ciexport default class DataShareExtAbility extends DataShareExtensionAbility { 238e41f4b71Sopenharmony_ci delete(uri: string, predicates: dataSharePredicates.DataSharePredicates, callback: Function) { 239e41f4b71Sopenharmony_ci if (predicates === null || predicates === undefined) { 240e41f4b71Sopenharmony_ci return; 241e41f4b71Sopenharmony_ci } 242e41f4b71Sopenharmony_ci rdbStore.delete(TBL_NAME, predicates, (err, ret) => { 243e41f4b71Sopenharmony_ci if (callback !== undefined) { 244e41f4b71Sopenharmony_ci callback(err, ret); 245e41f4b71Sopenharmony_ci } 246e41f4b71Sopenharmony_ci }); 247e41f4b71Sopenharmony_ci } 248e41f4b71Sopenharmony_ci}; 249e41f4b71Sopenharmony_ci``` 250e41f4b71Sopenharmony_ci 251e41f4b71Sopenharmony_ci## query 252e41f4b71Sopenharmony_ci 253e41f4b71Sopenharmony_ciquery?(uri: string, predicates: dataSharePredicates.DataSharePredicates, columns: Array<string>, callback: AsyncCallback<Object>): void 254e41f4b71Sopenharmony_ci 255e41f4b71Sopenharmony_ciQueries data from the database. This API can be overridden as required. 256e41f4b71Sopenharmony_ci 257e41f4b71Sopenharmony_ci**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider 258e41f4b71Sopenharmony_ci 259e41f4b71Sopenharmony_ci**Parameters** 260e41f4b71Sopenharmony_ci 261e41f4b71Sopenharmony_ci| Name| Type| Mandatory| Description| 262e41f4b71Sopenharmony_ci| ----- | ------ | ------ | ------ | 263e41f4b71Sopenharmony_ci| uri | string | Yes | URI of the data to query.| 264e41f4b71Sopenharmony_ci| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | Yes | Filter criteria for querying data.| 265e41f4b71Sopenharmony_ci| columns | Array<string> | Yes| Columns to query. If this parameter is empty, all columns will be queried.| 266e41f4b71Sopenharmony_ci| callback | AsyncCallback<Object> | Yes| Callback used to return the result set obtained.| 267e41f4b71Sopenharmony_ci 268e41f4b71Sopenharmony_ci**Example** 269e41f4b71Sopenharmony_ci 270e41f4b71Sopenharmony_ci```ts 271e41f4b71Sopenharmony_ciimport { DataShareExtensionAbility, relationalStore, dataSharePredicates } from '@kit.ArkData'; 272e41f4b71Sopenharmony_ci 273e41f4b71Sopenharmony_cilet TBL_NAME = 'TBL00'; 274e41f4b71Sopenharmony_cilet rdbStore: relationalStore.RdbStore; 275e41f4b71Sopenharmony_ci 276e41f4b71Sopenharmony_ciexport default class DataShareExtAbility extends DataShareExtensionAbility { 277e41f4b71Sopenharmony_ci query(uri: string, predicates: dataSharePredicates.DataSharePredicates, columns: Array<string>, callback: Function) { 278e41f4b71Sopenharmony_ci if (predicates === null || predicates === undefined) { 279e41f4b71Sopenharmony_ci return; 280e41f4b71Sopenharmony_ci } 281e41f4b71Sopenharmony_ci rdbStore.query(TBL_NAME, predicates, columns, (err, resultSet) => { 282e41f4b71Sopenharmony_ci if (resultSet !== undefined) { 283e41f4b71Sopenharmony_ci console.info(`resultSet.rowCount: ${resultSet.rowCount}`); 284e41f4b71Sopenharmony_ci } 285e41f4b71Sopenharmony_ci if (callback !== undefined) { 286e41f4b71Sopenharmony_ci callback(err, resultSet); 287e41f4b71Sopenharmony_ci } 288e41f4b71Sopenharmony_ci }); 289e41f4b71Sopenharmony_ci } 290e41f4b71Sopenharmony_ci}; 291e41f4b71Sopenharmony_ci``` 292e41f4b71Sopenharmony_ci 293e41f4b71Sopenharmony_ci## batchInsert 294e41f4b71Sopenharmony_ci 295e41f4b71Sopenharmony_cibatchInsert?(uri: string, valueBuckets: Array<ValuesBucket>, callback: AsyncCallback<number>): void 296e41f4b71Sopenharmony_ci 297e41f4b71Sopenharmony_ciBatch inserts data into the database. This API is called by the server and can be overridden as required. 298e41f4b71Sopenharmony_ci 299e41f4b71Sopenharmony_ci**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider 300e41f4b71Sopenharmony_ci 301e41f4b71Sopenharmony_ci**Parameters** 302e41f4b71Sopenharmony_ci 303e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 304e41f4b71Sopenharmony_ci| ------------ | ------------------------------------------------------------ | ---- | -------------------------------- | 305e41f4b71Sopenharmony_ci| uri | string | Yes | URI of the data to insert. | 306e41f4b71Sopenharmony_ci| valueBuckets | Array<[ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket)> | Yes | Data to insert. | 307e41f4b71Sopenharmony_ci| callback | AsyncCallback<number> | Yes | Callback used to return the number of inserted data records.| 308e41f4b71Sopenharmony_ci 309e41f4b71Sopenharmony_ci**Example** 310e41f4b71Sopenharmony_ci 311e41f4b71Sopenharmony_ci```ts 312e41f4b71Sopenharmony_ciimport { DataShareExtensionAbility, relationalStore, ValuesBucket } from '@kit.ArkData'; 313e41f4b71Sopenharmony_ci 314e41f4b71Sopenharmony_cilet TBL_NAME = 'TBL00'; 315e41f4b71Sopenharmony_cilet rdbStore: relationalStore.RdbStore; 316e41f4b71Sopenharmony_ci 317e41f4b71Sopenharmony_ciexport default class DataShareExtAbility extends DataShareExtensionAbility { 318e41f4b71Sopenharmony_ci batchInsert(uri: string, valueBuckets: Array<ValuesBucket>, callback: Function) { 319e41f4b71Sopenharmony_ci if (valueBuckets === null || valueBuckets.length === undefined) { 320e41f4b71Sopenharmony_ci console.error('invalid valueBuckets'); 321e41f4b71Sopenharmony_ci return; 322e41f4b71Sopenharmony_ci } 323e41f4b71Sopenharmony_ci rdbStore.batchInsert(TBL_NAME, valueBuckets, (err, ret) => { 324e41f4b71Sopenharmony_ci if (callback !== undefined) { 325e41f4b71Sopenharmony_ci callback(err, ret); 326e41f4b71Sopenharmony_ci } 327e41f4b71Sopenharmony_ci }); 328e41f4b71Sopenharmony_ci }; 329e41f4b71Sopenharmony_ci}; 330e41f4b71Sopenharmony_ci``` 331e41f4b71Sopenharmony_ci 332e41f4b71Sopenharmony_ci## normalizeUri 333e41f4b71Sopenharmony_ci 334e41f4b71Sopenharmony_cinormalizeUri?(uri: string, callback: AsyncCallback<string>): void 335e41f4b71Sopenharmony_ci 336e41f4b71Sopenharmony_ciNormalizes a URI. This API can be overridden as required. 337e41f4b71Sopenharmony_ci 338e41f4b71Sopenharmony_ci**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider 339e41f4b71Sopenharmony_ci 340e41f4b71Sopenharmony_ci**Parameters** 341e41f4b71Sopenharmony_ci 342e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 343e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ----------------------- | 344e41f4b71Sopenharmony_ci| uri | string | Yes | [URI](../apis-arkts/js-apis-uri.md#uri) to normalize.| 345e41f4b71Sopenharmony_ci| callback | AsyncCallback<string> | Yes | Callback used to return the result. If the operation is successful, the normalized URI is returned. Otherwise, **null** is returned.| 346e41f4b71Sopenharmony_ci 347e41f4b71Sopenharmony_ci**Example** 348e41f4b71Sopenharmony_ci 349e41f4b71Sopenharmony_ci```ts 350e41f4b71Sopenharmony_ciimport { DataShareExtensionAbility } from '@kit.ArkData'; 351e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit' 352e41f4b71Sopenharmony_ci 353e41f4b71Sopenharmony_ciexport default class DataShareExtAbility extends DataShareExtensionAbility { 354e41f4b71Sopenharmony_ci normalizeUri(uri: string, callback: Function) { 355e41f4b71Sopenharmony_ci let key = 'code'; 356e41f4b71Sopenharmony_ci let value = 0; 357e41f4b71Sopenharmony_ci let err: BusinessError = { 358e41f4b71Sopenharmony_ci code: value, 359e41f4b71Sopenharmony_ci name: key, 360e41f4b71Sopenharmony_ci message: key 361e41f4b71Sopenharmony_ci }; 362e41f4b71Sopenharmony_ci let ret: string = `normalize: ${uri}`; 363e41f4b71Sopenharmony_ci callback(err, ret); 364e41f4b71Sopenharmony_ci } 365e41f4b71Sopenharmony_ci}; 366e41f4b71Sopenharmony_ci``` 367e41f4b71Sopenharmony_ci 368e41f4b71Sopenharmony_ci## denormalizeUri 369e41f4b71Sopenharmony_ci 370e41f4b71Sopenharmony_cidenormalizeUri?(uri: string, callback: AsyncCallback<string>): void 371e41f4b71Sopenharmony_ci 372e41f4b71Sopenharmony_ciDenormalizes a URI. This API can be overridden as required. 373e41f4b71Sopenharmony_ci 374e41f4b71Sopenharmony_ci**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider 375e41f4b71Sopenharmony_ci 376e41f4b71Sopenharmony_ci**Parameters** 377e41f4b71Sopenharmony_ci 378e41f4b71Sopenharmony_ci| Name | Type | Mandatory| Description | 379e41f4b71Sopenharmony_ci| -------- | --------------------- | ---- | ----------------------- | 380e41f4b71Sopenharmony_ci| uri | string | Yes | [URI](../apis-arkts/js-apis-uri.md#uri) to denormalize.| 381e41f4b71Sopenharmony_ci| callback | AsyncCallback<string> | Yes | Callback used to return the result. If the operation is successful, the denormalized URI is returned. If the URI passed in is returned, denormalization is not required. If denormalization is not supported, **null** is returned.| 382e41f4b71Sopenharmony_ci 383e41f4b71Sopenharmony_ci**Example** 384e41f4b71Sopenharmony_ci 385e41f4b71Sopenharmony_ci```ts 386e41f4b71Sopenharmony_ciimport { DataShareExtensionAbility } from '@kit.ArkData'; 387e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit' 388e41f4b71Sopenharmony_ci 389e41f4b71Sopenharmony_ciexport default class DataShareExtAbility extends DataShareExtensionAbility { 390e41f4b71Sopenharmony_ci denormalizeUri(uri: string, callback: Function) { 391e41f4b71Sopenharmony_ci let key = 'code'; 392e41f4b71Sopenharmony_ci let value = 0; 393e41f4b71Sopenharmony_ci let err: BusinessError = { 394e41f4b71Sopenharmony_ci code: value, 395e41f4b71Sopenharmony_ci name: key, 396e41f4b71Sopenharmony_ci message: key 397e41f4b71Sopenharmony_ci }; 398e41f4b71Sopenharmony_ci let ret = `denormalize ${uri}`; 399e41f4b71Sopenharmony_ci callback(err, ret); 400e41f4b71Sopenharmony_ci } 401e41f4b71Sopenharmony_ci}; 402e41f4b71Sopenharmony_ci``` 403