• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.application.DataShareExtensionAbility (DataShare Extension Ability)
2
3The **DataShareExtensionAbility** module provides data share services based on the ExtensionAbility.
4
5>**NOTE**
6>
7> 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.
8>
9> The APIs provided by this module are system APIs.
10>
11> The APIs of this module can be used only in the stage model.
12
13
14## Modules to Import
15
16```ts
17import DataShareExtensionAbility from '@ohos.application.DataShareExtensionAbility';
18```
19
20## URI Naming Rule
21
22The URIs are in the following format:
23
24**Scheme://authority/path**
25- *Scheme*: scheme name, which has a fixed value of **datashare** for the **DataShare** module.
26- *authority*: [userinfo@]host[:port]
27    - *userinfo*: login information, which can be left unspecified.
28    - *host*: server address. It is the target device ID for cross-device access and empty for local device access.
29    - *port*: port number of the server, which can be left unspecified.
30- *path*: **DataShare** identifier and the resource path. The **DataShare** identifier is mandatory, and the resource path is optional.
31
32Example:
33
34- URI without the resource path:<br>**datashare:///com.samples.datasharetest.DataShare**
35
36- URI with the resource path:<br>**datashare:///com.samples.datasharetest.DataShare/DB00/TBL00**
37
38**com.samples.datasharetest.DataShare** is the data share identifier, and **DB00/TBL00** is the resource path.
39
40## Attributes
41
42**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider
43
44| Name| Type| Readable| Writable| Description|
45| -------- | -------- | -------- | -------- | -------- |
46| context | [ExtensionContext](js-apis-inner-application-extensionContext.md)  | Yes| No|Context of the DataShare Extension ability.|
47
48## onCreate
49
50onCreate?(want: Want, callback: AsyncCallback&lt;void&gt;): void
51
52Called by the server to initialize service logic when the DataShare client connects to the DataShareExtensionAbility server. This API can be overridden as required.
53
54**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider
55
56**Parameters**
57
58| Name| Type| Mandatory| Description|
59| ----- | ------ | ------ | ------ |
60| want | [Want](js-apis-application-want.md#want) | Yes | **Want** information, including the ability name and bundle name.|
61| callback | AsyncCallback&lt;void&gt; | Yes| Callback that returns no value.|
62
63**Example**
64
65```ts
66import rdb from '@ohos.data.relationalStore';
67
68let DB_NAME = 'DB00.db';
69let TBL_NAME = 'TBL00';
70let DDL_TBL_CREATE = 'CREATE TABLE IF NOT EXISTS '
71    + TBL_NAME
72    + ' (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, phoneNumber DOUBLE, isStudent BOOLEAN, Binary BINARY)';
73let rdbStore;
74
75export default class DataShareExtAbility extends DataShareExtensionAbility {
76    onCreate(want, callback) {
77        rdb.getRdbStore(this.context, {
78            name: DB_NAME,
79            securityLevel: rdb.SecurityLevel.S1
80        }, function (err, data) {
81            console.log('getRdbStore done, data : ' + data);
82            rdbStore = data;
83            rdbStore.executeSql(DDL_TBL_CREATE, [], function (err) {
84                console.log('executeSql done, error message : ' + err);
85            });
86            if (callback) {
87                callback();
88            }
89        });
90    }
91};
92```
93
94## insert
95
96insert?(uri: string, valueBucket: ValuesBucket, callback: AsyncCallback&lt;number&gt;): void
97
98Inserts data into the database. This API can be overridden as required.
99
100**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider
101
102**Parameters**
103
104| Name| Type| Mandatory| Description|
105| ----- | ------ | ------ | ------ |
106| uri |string | Yes | URI of the data to insert.|
107| valueBucket |[ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket) | Yes| Data to insert.|
108| callback |AsyncCallback&lt;number&gt; | Yes| Callback invoked to return the index of the data inserted.|
109
110**Example**
111
112```ts
113import rdb from '@ohos.data.relationalStore';
114
115let DB_NAME = 'DB00.db';
116let TBL_NAME = 'TBL00';
117let DDL_TBL_CREATE = 'CREATE TABLE IF NOT EXISTS '
118    + TBL_NAME
119    + ' (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, phoneNumber DOUBLE, isStudent BOOLEAN, Binary BINARY)';
120let rdbStore;
121
122export default class DataShareExtAbility extends DataShareExtensionAbility {
123    insert(uri, valueBucket, callback) {
124        if (valueBucket === null) {
125            console.info('invalid valueBuckets');
126            return;
127        }
128        rdbStore.insert(TBL_NAME, valueBucket, function (err, ret) {
129            console.info('callback ret:' + ret);
130            if (callback !== undefined) {
131                callback(err, ret);
132            }
133        });
134    }
135};
136```
137
138## update
139
140update?(uri: string, predicates: dataSharePredicates.DataSharePredicates, valueBucket: ValuesBucket, callback: AsyncCallback&lt;number&gt;): void
141
142Updates data in the database. This API can be overridden as required.
143
144**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider
145
146**Parameters**
147
148| Name| Type| Mandatory| Description|
149| ----- | ------ | ------ | ------ |
150| uri | string | Yes | URI of the data to update.|
151| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | Yes | Filter criteria for updating data.|
152| valueBucket | [ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket) | Yes| New data.|
153| callback | AsyncCallback&lt;number&gt; | Yes| Callback invoked to return the number of updated data records.|
154
155**Example**
156
157```ts
158import rdb from '@ohos.data.relationalStore';
159
160let DB_NAME = 'DB00.db';
161let TBL_NAME = 'TBL00';
162let DDL_TBL_CREATE = 'CREATE TABLE IF NOT EXISTS '
163    + TBL_NAME
164    + ' (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, phoneNumber DOUBLE, isStudent BOOLEAN, Binary BINARY)';
165let rdbStore;
166
167export default class DataShareExtAbility extends DataShareExtensionAbility {
168    update(uri, predicates, valueBucket, callback) {
169        if (predicates === null || predicates === undefined) {
170            return;
171        }
172        rdbStore.update(TBL_NAME, valueBucket, predicates, function (err, ret) {
173            if (callback !== undefined) {
174                callback(err, ret);
175            }
176        });
177    }
178};
179```
180
181## delete
182
183delete?(uri: string, predicates: dataSharePredicates.DataSharePredicates, callback: AsyncCallback&lt;number&gt;): void
184
185Deletes data from the database. This API can be overridden as required.
186
187**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider
188
189**Parameters**
190
191| Name      | Type                                                    | Mandatory| Description                              |
192| ---------- | ------------------------------------------------------------ | ---- | ---------------------------------- |
193| uri        | string                                                       | Yes  | URI of the data to delete.          |
194| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | Yes  | Filter criteria for deleting data.                    |
195| callback   | AsyncCallback&lt;number&gt;                                  | Yes  | Callback invoked to return the number of data records deleted.|
196
197**Example**
198
199```ts
200import rdb from '@ohos.data.relationalStore';
201
202let DB_NAME = 'DB00.db';
203let TBL_NAME = 'TBL00';
204let DDL_TBL_CREATE = 'CREATE TABLE IF NOT EXISTS '
205    + TBL_NAME
206    + ' (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, phoneNumber DOUBLE, isStudent BOOLEAN, Binary BINARY)';
207let rdbStore;
208
209export default class DataShareExtAbility extends DataShareExtensionAbility {
210    delete(uri, predicates, callback) {
211        if (predicates === null || predicates === undefined) {
212            return;
213        }
214        rdbStore.delete(TBL_NAME, predicates, function (err, ret) {
215            if (callback !== undefined) {
216                callback(err, ret);
217            }
218        });
219    }
220};
221```
222
223## query
224
225query?(uri: string, predicates: dataSharePredicates.DataSharePredicates, columns: Array&lt;string&gt;, callback: AsyncCallback&lt;Object&gt;): void
226
227Queries data from the database. This API can be overridden as required.
228
229**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider
230
231**Parameters**
232
233| Name| Type| Mandatory| Description|
234| ----- | ------ | ------ | ------ |
235| uri | string | Yes | URI of the data to query.|
236| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | Yes | Filter criteria for querying data.|
237| columns | Array&lt;string&gt; | Yes| Columns to query. If this parameter is empty, all columns will be queried.|
238| callback | AsyncCallback&lt;Object&gt; | Yes| Callback invoked to return the result set obtained.|
239
240**Example**
241
242```ts
243import rdb from '@ohos.data.relationalStore';
244
245let DB_NAME = 'DB00.db';
246let TBL_NAME = 'TBL00';
247let DDL_TBL_CREATE = 'CREATE TABLE IF NOT EXISTS '
248    + TBL_NAME
249    + ' (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, phoneNumber DOUBLE, isStudent BOOLEAN, Binary BINARY)';
250let rdbStore;
251
252export default class DataShareExtAbility extends DataShareExtensionAbility {
253    query(uri, predicates, columns, callback) {
254        if (predicates === null || predicates === undefined) {
255            return;
256        }
257        rdbStore.query(TBL_NAME, predicates, columns, function (err, resultSet) {
258            if (resultSet !== undefined) {
259                console.info('resultSet.rowCount: ' + resultSet.rowCount);
260            }
261            if (callback !== undefined) {
262                callback(err, resultSet);
263            }
264        });
265    }
266};
267```
268
269## batchInsert
270
271batchInsert?(uri: string, valueBuckets: Array&lt;ValuesBucket&gt;, callback: AsyncCallback&lt;number&gt;): void
272
273Batch inserts data into the database. This API is called by the server and can be overridden as required.
274
275**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider
276
277**Parameters**
278
279| Name       | Type                                                    | Mandatory| Description                            |
280| ------------ | ------------------------------------------------------------ | ---- | -------------------------------- |
281| uri          | string                                                       | Yes  | URI of the data to insert.    |
282| valueBuckets | Array&lt;[ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket)&gt; | Yes  | Data to insert.          |
283| callback     | AsyncCallback&lt;number&gt;                                  | Yes  | Callback invoked to return the number of inserted data records.|
284
285**Example**
286
287```ts
288import rdb from '@ohos.data.relationalStore';
289
290let DB_NAME = 'DB00.db';
291let TBL_NAME = 'TBL00';
292let DDL_TBL_CREATE = 'CREATE TABLE IF NOT EXISTS '
293    + TBL_NAME
294    + ' (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, phoneNumber DOUBLE, isStudent BOOLEAN, Binary BINARY)';
295let rdbStore;
296
297export default class DataShareExtAbility extends DataShareExtensionAbility {
298    batchInsert(uri, valueBuckets, callback) {
299        if (valueBuckets === null || valueBuckets.length === undefined) {
300            console.info('invalid valueBuckets');
301            return;
302        }
303        let resultNum = valueBuckets.length;
304        valueBuckets.forEach(vb => {
305            rdbStore.insert(TBL_NAME, vb, function (err, ret) {
306                if (callback !== undefined) {
307                    callback(err, resultNum);
308                }
309            });
310        });
311    }
312};
313```
314
315## normalizeUri
316
317normalizeUri?(uri: string, callback: AsyncCallback&lt;string&gt;): void
318
319Normalizes a URI. This API can be overridden as required.
320
321**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider
322
323**Parameters**
324
325| Name    | Type                 | Mandatory| Description                   |
326| -------- | --------------------- | ---- | ----------------------- |
327| uri      | string                | Yes  | [URI](js-apis-uri.md#uri) to normalize.|
328| 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.|
329
330**Example**
331
332```ts
333export default class DataShareExtAbility extends DataShareExtensionAbility {
334    normalizeUri(uri, callback) {
335        let err = {'code':0};
336        let ret = 'normalize+' + uri;
337        callback(err, ret);
338    }
339};
340```
341
342## denormalizeUri
343
344denormalizeUri?(uri: string, callback: AsyncCallback&lt;string&gt;): void
345
346Denormalizes a URI. This API can be overridden as required.
347
348**System capability**: SystemCapability.DistributedDataManager.DataShare.Provider
349
350**Parameters**
351
352| Name    | Type                 | Mandatory| Description                   |
353| -------- | --------------------- | ---- | ----------------------- |
354| uri      | string                | Yes  | [URI](js-apis-uri.md#uri) to denormalize.|
355| 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.|
356
357**Example**
358
359```ts
360export default class DataShareExtAbility extends DataShareExtensionAbility {
361    denormalizeUri(uri, callback) {
362        let err = {'code':0};
363        let ret = 'denormalize+' + uri;
364        callback(err, ret);
365    }
366};
367```
368