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<void>): 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<void> | 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<number>): 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<number> | 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<number>): 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<number> | 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<number>): 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<number> | 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<string>, callback: AsyncCallback<Object>): 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<string> | Yes| Columns to query. If this parameter is empty, all columns will be queried.| 238| callback | AsyncCallback<Object> | 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<ValuesBucket>, callback: AsyncCallback<number>): 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<[ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket)> | Yes | Data to insert. | 283| callback | AsyncCallback<number> | 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<string>): 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<string> | 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<string>): 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<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.| 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