js-apis-application-DataShareExtensionAbility.md 12.6 KB
Newer Older
S
songruirui 已提交
1
# 数据共享扩展能力
S
songruirui 已提交
2

S
songruirui 已提交
3
**DataShareExtensionAbility**基于ExtensionAbility框架,提供支持数据共享业务的能力。
S
songruirui 已提交
4 5

>**说明:** 
S
songruirui 已提交
6
>
S
songruirui 已提交
7
>本模块首批接口从API version 9开始支持,后续版本的新增接口,采用上角标单独标记接口的起始版本。
S
songruirui 已提交
8
>
S
songruirui 已提交
9 10 11
>本模块接口为系统接口。
>
>本模块接口仅可在Stage模型下使用。
S
songruirui 已提交
12 13 14 15


## 导入模块

S
songruirui 已提交
16 17
```ts
import DataShareExtensionAbility from '@ohos.application.DataShareExtensionAbility'
S
songruirui 已提交
18 19 20 21
```

## onCreate

S
songruirui 已提交
22
onCreate?(want: Want, callback: AsyncCallback<void>): void
S
songruirui 已提交
23

S
songruirui 已提交
24
DataShare客户端连接DataShareExtensionAbility服务端时,服务端回调此接口,执行初始化业务逻辑操作。该方法可以选择性重写。
S
songruirui 已提交
25

S
songruirui 已提交
26
**系统能力:**  SystemCapability.DistributedDataManager.DataShare.Provider
S
songruirui 已提交
27 28 29 30 31

**参数:**

| 参数名 | 参数类型 | 必填 | 说明 |
| ----- | ------ | ------ | ------ |
S
songruirui 已提交
32
| want | [Want](js-apis-application-Want.md#want) | 是  | Want类型信息,包括ability名称、bundle名称等。 |
S
修改  
songruirui 已提交
33
| callback | AsyncCallback<void> | 是 | 回调函数。无返回值。 |
S
songruirui 已提交
34 35 36

**示例:**

S
songruirui 已提交
37
```ts
S
songruirui 已提交
38 39
import rdb from '@ohos.data.rdb';

S
songruirui 已提交
40 41 42 43 44
let DB_NAME = "DB00.db";
let TBL_NAME = "TBL00";
let DDL_TBL_CREATE = "CREATE TABLE IF NOT EXISTS "
+ TBL_NAME
+ " (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, phoneNumber DOUBLE, isStudent BOOLEAN, Binary BINARY)";
S
修改  
songruirui 已提交
45
let rdbStore;
S
songruirui 已提交
46

S
修改  
songruirui 已提交
47
onCreate(want: Want, callback: AsyncCallback<void>) {
S
songruirui 已提交
48 49 50 51
    rdb.getRdbStore(this.context, {
        name: DB_NAME
    }, 1, function (err, data) {
        console.log('getRdbStore done, data : ' + data);
S
修改  
songruirui 已提交
52
        rdbStore = data;
S
songruirui 已提交
53
        rdbStore.executeSql(DDL_TBL_CREATE, [], function (err) {
S
修改  
songruirui 已提交
54
            console.log('executeSql done, error message : ' + err);
S
songruirui 已提交
55
        });
S
songruirui 已提交
56 57 58
        if (callback) {
            callback();
        }
S
songruirui 已提交
59 60 61 62
    });
}
```

S
songruirui 已提交
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
## getFileTypes

getFileTypes?(uri: string, mimeTypeFilter: string, callback: AsyncCallback&lt;Array&lt;string&gt;&gt;): void

获取支持文件的MIME类型时服务端回调此接口,该方法可以选择性重写。

**系统能力:**  SystemCapability.DistributedDataManager.DataShare.Provider

**参数:**

| 名称           | 类型                                     | 必填 | 描述                               |
| -------------- | ---------------------------------------- | ---- | ---------------------------------- |
| uri            | string                                   | 是   | 指示要获取的文件的路径。           |
| mimeTypeFilter | string                                   | 是   | 指示要获取的文件的MIME类型。       |
| callback       | AsyncCallback&lt;Array&lt;string&gt;&gt; | 是   | 回调函数。返回匹配的MIME类型数组。 |

**示例:**

```ts
getFileTypes(uri: string, mimeTypeFilter: string, callback: AsyncCallback<Array<string>>) {
    let err = {"code":0};
    let ret = new Array("type01", "type02", "type03");
    callback(err, ret);
}
```

## openFile

openFile?(uri: string, mode: string, callback: AsyncCallback&lt;number&gt;): void

在打开文件时服务端回调此接口,该方法可以选择性重写。

**系统能力:**  SystemCapability.DistributedDataManager.DataShare.Provider

**参数:**

| 名称     | 类型                  | 必填 | 描述                                       |
| -------- | --------------------- | ---- | ------------------------------------------ |
| uri      | string                | 是   | 指示要打开的文件的路径。        |
| mode     | string                | 是   | 指示文件打开模式,包括只读模式,读写模式。 |
| callback | AsyncCallback&lt;number&gt; | 是   | 回调函数。返回文件描述符。        |

**示例:**

```ts
openFile(uri: string, mode: string, callback: AsyncCallback<number>) {
    let err = {"code":0};
    let fd = 0;
    callback(err,fd);
}
```

S
songruirui 已提交
115 116
## insert

S
songruirui 已提交
117
insert?(uri: string, valueBucket: ValuesBucket, callback: AsyncCallback&lt;number&gt;): void
S
songruirui 已提交
118

S
songruirui 已提交
119
在数据库插入时回调此接口,该方法可以选择性重写。
S
songruirui 已提交
120

S
修改  
songruirui 已提交
121
**系统能力:**  SystemCapability.DistributedDataManager.DataShare.Provider
S
songruirui 已提交
122 123 124 125 126

**参数:**

| 参数名 | 参数类型 | 必填 | 说明 |
| ----- | ------ | ------ | ------ |
S
songruirui 已提交
127
| uri |string | 是  | 指示要插入的数据的路径。 |
S
修改  
songruirui 已提交
128 129
| valueBucket |[ValuesBucket](js-apis-data-ValuesBucket.md#valuesbucket) | 是 | 指示要插入的数据。 |
| callback |AsyncCallback&lt;number&gt; | 是 | 回调函数。返回插入数据记录的索引。 |
S
songruirui 已提交
130 131 132

**示例:**

S
songruirui 已提交
133
```ts
S
修改  
songruirui 已提交
134
insert(uri: string, valueBucket: ValuesBucket, callback: AsyncCallback<number>) {
S
songruirui 已提交
135 136 137 138 139 140 141 142 143
    if (value == null) {
        console.info('invalid valueBuckets');
        return;
    }
    rdbStore.insert(TBL_NAME, value, function (err, ret) {
        console.info('callback ret:' + ret);
        if (callback != undefined) {
            callback(err, ret);
        }
S
songruirui 已提交
144 145 146 147
    });
}
```

S
songruirui 已提交
148
## update
S
songruirui 已提交
149

S
songruirui 已提交
150
update?(uri: string, predicates: dataSharePredicates.DataSharePredicates, valueBucket: ValuesBucket, callback: AsyncCallback&lt;number&gt;): void
S
songruirui 已提交
151

S
songruirui 已提交
152
在数据库更新时服务端回调此接口,该方法可以选择性重写。
S
songruirui 已提交
153

S
修改  
songruirui 已提交
154
**系统能力:**  SystemCapability.DistributedDataManager.DataShare.Provider
S
songruirui 已提交
155

S
songruirui 已提交
156
**参数:**
S
songruirui 已提交
157

S
songruirui 已提交
158 159 160
| 参数名 | 参数类型 | 必填 | 说明 |
| ----- | ------ | ------ | ------ |
| uri | string | 是  | 指示要更新的数据的路径。 |
S
修改  
songruirui 已提交
161
| predicates | [DataSharePredicates](js-apis-data-DataSharePredicates.md#datasharepredicates) | 是  | 指示筛选条件。 |
S
songruirui 已提交
162
| valueBucket | [ValuesBucket](js-apis-data-ValuesBucket.md#valuesbucket) | 是 | 指示要更新的数据。 |
S
修改  
songruirui 已提交
163
| callback | AsyncCallback&lt;number&gt; | 是 | 回调函数。返回更新的数据记录数。 |
S
songruirui 已提交
164 165 166

**示例:**

S
songruirui 已提交
167
```ts
S
修改  
songruirui 已提交
168
update(uri: string, predicates: dataSharePredicates.DataSharePredicates, valueBucket: ValuesBucket, callback: AsyncCallback<number>) {
S
songruirui 已提交
169 170 171 172 173 174 175 176
    if (predicates == null || predicates == undefined) {
        return;
    }
    rdbStore.update(TBL_NAME, value, predicates, function (err, ret) {
        if (callback != undefined) {
            callback(err, ret);
        }
    });
S
songruirui 已提交
177 178 179
}
```

S
songruirui 已提交
180
## delete
S
songruirui 已提交
181

S
songruirui 已提交
182
delete?(uri: string, predicates: dataSharePredicates.DataSharePredicates, callback: AsyncCallback&lt;number&gt;): void
S
songruirui 已提交
183

S
修改  
songruirui 已提交
184
在删除数据库记录时服务端回调此接口,该方法可以选择性重写。
S
songruirui 已提交
185

S
修改  
songruirui 已提交
186
**系统能力:**  SystemCapability.DistributedDataManager.DataShare.Provider
S
songruirui 已提交
187

S
songruirui 已提交
188
**参数:**
S
songruirui 已提交
189

S
修改  
songruirui 已提交
190 191 192
| 名称       | 参数类型                                                     | 必填 | 说明                               |
| ---------- | ------------------------------------------------------------ | ---- | ---------------------------------- |
| uri        | string                                                       | 是   | 指示要删除的数据的路径。           |
S
修改  
songruirui 已提交
193
| predicates | [DataSharePredicates](js-apis-data-DataSharePredicates.md#datasharepredicates) | 是   | 指示筛选条件。                     |
S
修改  
songruirui 已提交
194
| callback   | AsyncCallback&lt;number&gt;                                  | 是   | 回调函数。返回已删除的数据记录数。 |
S
songruirui 已提交
195 196 197

**示例:**

S
songruirui 已提交
198
```ts
S
修改  
songruirui 已提交
199
delete(uri: string, predicates: dataSharePredicates.DataSharePredicates, callback: AsyncCallback<number>) {
S
songruirui 已提交
200 201 202 203 204 205 206 207
    if (predicates == null || predicates == undefined) {
        return;
    }
    rdbStore.delete(TBL_NAME, predicates, function (err, ret) {
        if (callback != undefined) {
            callback(err, ret);
        }
    });
S
songruirui 已提交
208 209 210
}
```

S
songruirui 已提交
211
## query
S
songruirui 已提交
212

S
songruirui 已提交
213
query?(uri: string, predicates: dataSharePredicates.DataSharePredicates, columns: Array&lt;string&gt;, callback: AsyncCallback&lt;Object&gt;): void
S
songruirui 已提交
214

S
songruirui 已提交
215
在查询数据库时服务端回调此接口,该方法可以选择性重写。
S
songruirui 已提交
216

S
修改  
songruirui 已提交
217
**系统能力:**  SystemCapability.DistributedDataManager.DataShare.Provider
S
songruirui 已提交
218

S
songruirui 已提交
219 220
**参数:**

S
songruirui 已提交
221 222 223 224 225 226
| 名称 | 参数类型 | 必填 | 说明 |
| ----- | ------ | ------ | ------ |
| uri | string | 是  | 指示要查询的数据的路径。 |
| predicates | [DataSharePredicates](js-apis-data-DataSharePredicates.md#datasharepredicates) | 是  | 指示筛选条件。 |
| columns | Array&lt;string&gt; | 是 | 指示要查询的列。如果此参数为空,则查询所有列。 |
| callback | AsyncCallback&lt;Object&gt; | 是 | 回调函数。返回查询到的结果集。 |
S
songruirui 已提交
227 228 229

**示例:**

S
songruirui 已提交
230
```ts
S
songruirui 已提交
231 232
query(uri: string, predicates: dataSharePredicates.DataSharePredicates, columns: Array<string>, callback: AsyncCallback<Object>) {
    if (predicates == null || predicates == undefined) {
S
songruirui 已提交
233 234
        return;
    }
S
songruirui 已提交
235 236 237 238 239 240 241
    rdbStore.query(TBL_NAME, predicates, columns, function (err, resultSet) {
        if (resultSet != undefined) {
            console.info('resultSet.rowCount: ' + resultSet.rowCount);
        }
        if (callback != undefined) {
            callback(err, resultSet);
        }
S
songruirui 已提交
242
    });
S
songruirui 已提交
243 244 245
}
```

S
songruirui 已提交
246
## getType
S
songruirui 已提交
247

S
songruirui 已提交
248
getType?(uri: string, callback: AsyncCallback&lt;string&gt;): void
S
songruirui 已提交
249

S
修改  
songruirui 已提交
250
获取给定URI对应的MIME类型时服务端回调此接口,该方法可以选择性重写。
S
songruirui 已提交
251

S
修改  
songruirui 已提交
252
**系统能力:**  SystemCapability.DistributedDataManager.DataShare.Provider
S
songruirui 已提交
253 254 255 256 257

**参数:**

| 参数名 | 参数类型 | 必填 | 说明 |
| ----- | ------ | ------ | ------ |
S
songruirui 已提交
258
| uri | string | 是  | 指示要获取MIME类型的数据的路径。 |
S
修改  
songruirui 已提交
259
| callback | AsyncCallback&lt;string&gt; | 是 | 回调函数。返回与URI指定的数据匹配的MIME类型。 |
S
songruirui 已提交
260 261 262

**示例:**

S
songruirui 已提交
263
```ts
S
修改  
songruirui 已提交
264
getType(uri: string, callback: AsyncCallback<string>) {
S
修改  
songruirui 已提交
265
    let err = {"code":0};
S
songruirui 已提交
266 267
    let ret = "image";
    callback(err, ret);
S
songruirui 已提交
268 269 270
}
```

S
songruirui 已提交
271
## BatchInsert
S
songruirui 已提交
272

S
songruirui 已提交
273
BatchInsert?(uri: string, valueBuckets: Array&lt;ValuesBucket&gt;, callback: AsyncCallback&lt;number&gt;): void
S
songruirui 已提交
274

S
songruirui 已提交
275
在数据库批量插入时服务端回调此接口,该方法可以选择性重写。
S
songruirui 已提交
276

S
修改  
songruirui 已提交
277
**系统能力:**  SystemCapability.DistributedDataManager.DataShare.Provider
S
songruirui 已提交
278

S
songruirui 已提交
279
**参数:**
S
songruirui 已提交
280

S
songruirui 已提交
281 282 283 284 285
| 名称         | 参数类型                                                     | 必填 | 说明                             |
| ------------ | ------------------------------------------------------------ | ---- | -------------------------------- |
| uri          | string                                                       | 是   | 指示要批量插入的数据的路径。     |
| valueBuckets | Array&lt;[ValuesBucket](js-apis-data-ValuesBucket.md#valuesbucket)&gt; | 是   | 指示要批量插入的数据。           |
| callback     | AsyncCallback&lt;number&gt;                                  | 是   | 回调函数。返回插入的数据记录数。 |
S
songruirui 已提交
286 287 288

**示例:**

S
songruirui 已提交
289
```ts
S
songruirui 已提交
290 291 292 293 294 295 296 297 298 299 300 301 302
batchInsert(uri: string, valueBuckets: Array<ValuesBucket>, callback: AsyncCallback<number>) {
    if (valueBuckets == null || valueBuckets.length == undefined) {
        console.info('invalid valueBuckets');
        return;
    }
    let resultNum = valueBuckets.length
    valueBuckets.forEach(vb => {
        rdbStore.insert(TBL_NAME, vb, function (err, ret) {
            if (callback != undefined) {
                callback(err, resultNum);
            }
        });
    });
S
songruirui 已提交
303 304 305
}
```

S
songruirui 已提交
306
## normalizeUri
S
songruirui 已提交
307

S
songruirui 已提交
308
normalizeUri?(uri: string, callback: AsyncCallback&lt;string&gt;): void
S
songruirui 已提交
309

S
修改  
songruirui 已提交
310
用户给定的URI转换为服务端使用的URI时回调此接口,该方法可以选择性重写。
S
songruirui 已提交
311

S
修改  
songruirui 已提交
312
**系统能力:**  SystemCapability.DistributedDataManager.DataShare.Provider
S
songruirui 已提交
313 314

**参数:**
S
songruirui 已提交
315

S
songruirui 已提交
316 317
| 名称     | 类型                  | 必填 | 描述                    |
| -------- | --------------------- | ---- | ----------------------- |
S
修改  
songruirui 已提交
318
| uri      | string                | 是   | 指示用户传入的[URI](js-apis-uri.md#uri)。 |
S
修改  
songruirui 已提交
319
| callback | AsyncCallback&lt;string&gt; | 是   | 回调函数。如果支持URI规范化,则返回规范化URI,否则返回空。 |
S
songruirui 已提交
320 321 322

**示例:**

S
songruirui 已提交
323
```ts
S
修改  
songruirui 已提交
324
normalizeUri(uri: string, callback: AsyncCallback<string>) {
S
修改  
songruirui 已提交
325
    let err = {"code":0};
S
songruirui 已提交
326 327
    let ret = "normalize+" + uri;
    callback(err, ret);
S
songruirui 已提交
328 329 330
}
```

S
songruirui 已提交
331
## denormalizeUri
S
songruirui 已提交
332

S
songruirui 已提交
333
denormalizeUri?(uri: string, callback: AsyncCallback&lt;string&gt;): void
S
songruirui 已提交
334

S
修改  
songruirui 已提交
335
服务端使用的URI转换为用户传入的初始URI时服务端回调此接口,该方法可以选择性重写。
S
songruirui 已提交
336

S
修改  
songruirui 已提交
337
**系统能力:**  SystemCapability.DistributedDataManager.DataShare.Provider
S
songruirui 已提交
338

S
songruirui 已提交
339
**参数:**
S
songruirui 已提交
340

S
songruirui 已提交
341 342
| 名称     | 类型                  | 必填 | 描述                    |
| -------- | --------------------- | ---- | ----------------------- |
S
修改  
songruirui 已提交
343
| uri      | string                | 是   | 指示服务端使用的[URI](js-apis-uri.md#uri)。 |
S
修改  
songruirui 已提交
344
| callback | AsyncCallback&lt;string&gt; | 是   | 回调函数。如果反规范化成功,则返回反规范化的URI;如果无需进行反规范化,则返回原始URI;若不支持则返回空。 |
S
songruirui 已提交
345 346 347

**示例:**

S
songruirui 已提交
348
```ts
S
修改  
songruirui 已提交
349
denormalizeUri(uri: string, callback: AsyncCallback<string>) {
S
修改  
songruirui 已提交
350
    let err = {"code":0};
S
songruirui 已提交
351
	let ret = "denormalize+" + uri;
S
songruirui 已提交
352
	callback(err, ret);
S
songruirui 已提交
353 354
}
```