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&lt;void&gt;): 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&lt;void&gt; | 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&lt;number&gt;): 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&lt;number&gt; | 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&lt;number&gt;): 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&lt;number&gt; | 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&lt;string, Array&lt;UpdateOperation&gt;&gt; , callback:  AsyncCallback&lt;Record&lt;string, Array&lt;number&gt;&gt;&gt;): 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&lt;string, Array&lt;[UpdateOperation](#updateoperation12)&gt;&gt; | Yes  | Collection of the path of the data to update, update conditions, and new data.                |
177e41f4b71Sopenharmony_ci| callback   | AsyncCallback&lt;Record&lt;string, Array&lt;number&gt;&gt;&gt;  | 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&lt;number&gt;): 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&lt;number&gt;                                  | 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&lt;string&gt;, callback: AsyncCallback&lt;Object&gt;): 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&lt;string&gt; | Yes| Columns to query. If this parameter is empty, all columns will be queried.|
266e41f4b71Sopenharmony_ci| callback | AsyncCallback&lt;Object&gt; | 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&lt;ValuesBucket&gt;, callback: AsyncCallback&lt;number&gt;): 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&lt;[ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket)&gt; | Yes  | Data to insert.          |
307e41f4b71Sopenharmony_ci| callback     | AsyncCallback&lt;number&gt;                                  | 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&lt;string&gt;): 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&lt;string&gt; | 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&lt;string&gt;): 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&lt;string&gt; | 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