1 # @ohos.data.distributedKVStore (分布式键值数据库)(系统接口)
2
3分布式键值数据库为应用程序提供不同设备间数据库的分布式协同能力。通过调用分布式键值数据库各个接口,应用程序可将数据保存到分布式键值数据库中,并可对分布式键值数据库中的数据进行增加、删除、修改、查询、同步等操作。
4
5该模块提供以下分布式键值数据库相关的常用功能:
6
7- [KVManager](js-apis-distributedKVStore.md#kvmanager):分布式键值数据库管理实例,用于获取数据库的相关信息。
8- [KVStoreResultSet](js-apis-distributedKVStore.md#kvstoreresultset):提供获取数据库结果集的相关方法,包括查询和移动数据读取位置等。
9- [Query](js-apis-distributedKVStore.md#query):使用谓词表示数据库查询,提供创建Query实例、查询数据库中的数据和添加谓词的方法。
10- [SingleKVStore](#singlekvstore):单版本分布式键值数据库,不对数据所属设备进行区分,提供查询数据和同步数据的方法。
11- [DeviceKVStore](#devicekvstore):设备协同数据库,继承自[SingleKVStore](#singlekvstore),以设备维度对数据进行区分,提供查询数据和同步数据的方法。
12
13> **说明:** 
14>
15> - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
16>
17> - 当前页面仅包含本模块的系统接口,其他公开接口参见[@ohos.data.distributedKVStore (分布式键值数据库)](js-apis-distributedKVStore.md)。
18
19## 导入模块
20
21```ts
22import { distributedKVStore } from '@kit.ArkData';
23```
24
25## SingleKVStore
26
27SingleKVStore数据库实例,提供增加数据、删除数据和订阅数据变更、订阅数据同步完成的方法。
28
29在调用SingleKVStore的方法前,需要先通过[getKVStore](js-apis-distributedKVStore.md#getkvstore)构建一个SingleKVStore实例。
30
31### putBatch
32
33putBatch(value: Array<ValuesBucket>, callback: AsyncCallback<void>): void
34
35将值写入SingleKVStore数据库,使用callback异步回调。
36
37**模型约束:** 此接口仅可在Stage模型下使用
38
39**系统接口:** 此接口为系统接口。
40
41**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
42
43**参数:**
44
45| 参数名   | 类型                                                     | 必填 | 说明               |
46| -------- | ------------------------------------------------------------ | ---- | ------------------ |
47| value    | Array<[ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket)> | 是   | 表示要插入的数据。 |
48| callback | AsyncCallback<void>                                     | 是   | 回调函数。         |
49
50**错误码:**
51
52以下错误码的详细介绍请参见[分布式键值数据库错误码](errorcode-distributedKVStore.md)。
53
54| **错误码ID** | **错误信息**                             |
55| ------------ | ---------------------------------------- |
56| 401          | Parameter error.Possible causes:1.Mandatory parameters are left unspecified; 2.Incorrect parameters types.|
57| 202          | Permission verification failed, application which is not a system application uses system API.|
58| 15100003     | Database corrupted.                      |
59| 15100005     | Database or result set already closed.   |
60
61以下错误码的详细介绍请参见[关系型数据库错误码](errorcode-data-rdb.md)。
62
63| **错误码ID** | **错误信息**                                 |
64| ------------ | -------------------------------------------- |
65| 14800047     | The WAL file size exceeds the default limit. |
66
67**示例:**
68
69```ts
70import { BusinessError } from '@kit.BasicServicesKit';
71
72try {
73  let v8Arr: distributedKVStore.Entry[] = [];
74  let arr = new Uint8Array([4, 5, 6, 7]);
75  let vb1: distributedKVStore.Entry = { key: "name_1", value: {type: distributedKVStore.ValueType.INTEGER, value: 32} }
76  let vb2: distributedKVStore.Entry = { key: "name_2", value: {type: distributedKVStore.ValueType.BYTE_ARRAY, value: arr} };
77  let vb3: distributedKVStore.Entry = { key: "name_3", value: {type: distributedKVStore.ValueType.STRING, value: "lisi"} };
78
79  v8Arr.push(vb1);
80  v8Arr.push(vb2);
81  v8Arr.push(vb3);
82  kvStore.putBatch(v8Arr, async (err: BusinessError) => {
83    if (err != undefined) {
84      console.error(`Failed to put batch.code is ${err.code},message is ${err.message}`);
85      return;
86    }
87    console.info('Succeeded in putting batch');
88  })
89} catch (e) {
90  let error = e as BusinessError;
91  console.error(`Failed to put batch.code is ${error.code},message is ${error.message}`);
92}
93```
94
95### putBatch
96
97putBatch(value: Array<ValuesBucket>): Promise<void>
98
99将valuesbucket类型的值写入SingleKVStore数据库,使用Promise异步回调。
100
101**模型约束:** 此接口仅可在Stage模型下使用
102
103**系统接口:** 此接口为系统接口。
104
105**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
106
107**参数:**
108
109| 参数名 | 类型                                                     | 必填 | 说明               |
110| ------ | ------------------------------------------------------------ | ---- | ------------------ |
111| value  | Array<[ValuesBucket](js-apis-data-valuesBucket.md#valuesbucket)> | 是   | 表示要插入的数据。 |
112
113**返回值:**
114
115| 类型                | 说明                      |
116| ------------------- | ------------------------- |
117| Promise<void> | 无返回结果的Promise对象。 |
118
119**错误码:**
120
121以下错误码的详细介绍请参见[分布式键值数据库错误码](errorcode-distributedKVStore.md)。
122
123| **错误码ID** | **错误信息**                             |
124| ------------ | ---------------------------------------- |
125| 401          | Parameter error.Possible causes:1.Mandatory parameters are left unspecified; 2.Incorrect parameters types.|
126| 202          | Permission verification failed, application which is not a system application uses system API.|
127| 15100003     | Database corrupted.                      |
128| 15100005     | Database or result set already closed.   |
129
130以下错误码的详细介绍请参见[关系型数据库错误码](errorcode-data-rdb.md)。
131
132| **错误码ID** | **错误信息**                                 |
133| ------------ | -------------------------------------------- |
134| 14800047     | The WAL file size exceeds the default limit. |
135
136**示例:**
137
138```ts
139import { BusinessError } from '@kit.BasicServicesKit';
140
141try {
142  let v8Arr: distributedKVStore.Entry[] = [];
143  let arr = new Uint8Array([4, 5, 6, 7]);
144  let vb1: distributedKVStore.Entry = { key: "name_1", value: {type: distributedKVStore.ValueType.INTEGER, value: 32} }
145  let vb2: distributedKVStore.Entry = { key: "name_2", value: {type: distributedKVStore.ValueType.BYTE_ARRAY, value: arr} };
146  let vb3: distributedKVStore.Entry = { key: "name_3", value: {type: distributedKVStore.ValueType.STRING, value: "lisi"} };
147
148  v8Arr.push(vb1);
149  v8Arr.push(vb2);
150  v8Arr.push(vb3);
151  kvStore.putBatch(v8Arr).then(async () => {
152    console.info(`Succeeded in putting patch`);
153  }).catch((err: BusinessError) => {
154    console.error(`putBatch fail.code is ${err.code},message is ${err.message}`);
155  });
156} catch (e) {
157  let error = e as BusinessError;
158  console.error(`putBatch fail.code is ${error.code},message is ${error.message}`);
159}
160```
161
162### delete
163
164delete(predicates: dataSharePredicates.DataSharePredicates, callback: AsyncCallback<void>)
165
166从数据库中删除符合predicates条件的键值对,使用callback异步回调。
167
168**模型约束:** 此接口仅可在Stage模型下使用
169
170**系统接口:** 此接口为系统接口。
171
172**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider
173
174**参数:**
175
176| 参数名     | 类型                                                     | 必填 | 说明                                            |
177| ---------- | ------------------------------------------------------------ | ---- | ----------------------------------------------- |
178| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | 是   | 指示筛选条件,当此参数为null时,应定义处理逻辑。 |
179| callback   | AsyncCallback<void>                                    | 是   | 回调函数。                                      |
180
181**错误码:**
182
183以下错误码的详细介绍请参见[分布式键值数据库错误码](errorcode-distributedKVStore.md)。
184
185| **错误码ID** | **错误信息**                           |
186| ------------ | -------------------------------------- |
187| 401          | Parameter error.Possible causes:1.Mandatory parameters are left unspecified; 2.Incorrect parameters types.|
188| 202          | Permission verification failed, application which is not a system application uses system API.|
189| 15100003     | Database corrupted.                    |
190| 15100005    | Database or result set already closed. |
191
192以下错误码的详细介绍请参见[关系型数据库错误码](errorcode-data-rdb.md)。
193
194| **错误码ID** | **错误信息**                                 |
195| ------------ | -------------------------------------------- |
196| 14800047     | The WAL file size exceeds the default limit. |
197
198**示例:**
199
200```ts
201import { dataSharePredicates } from '@kit.ArkData';
202import { BusinessError } from '@kit.BasicServicesKit';
203
204try {
205  let predicates = new dataSharePredicates.DataSharePredicates();
206  let arr = ["name"];
207  predicates.inKeys(arr);
208  kvStore.put("name", "bob", (err:BusinessError) => {
209    if (err != undefined) {
210      console.error(`Failed to put.code is ${err.code},message is ${err.message}`);
211      return;
212    }
213    console.info("Succeeded in putting");
214    if (kvStore != null) {
215      kvStore.delete(predicates, (err:BusinessError) => {
216        if (err == undefined) {
217          console.info('Succeeded in deleting');
218        } else {
219          console.error(`Failed to delete.code is ${err.code},message is ${err.message}`);
220        }
221      });
222    }
223  });
224} catch (e) {
225  let error = e as BusinessError;
226  console.error(`An unexpected error occurred.code is ${error.code},message is ${error.message}`);
227}
228```
229
230### delete
231
232delete(predicates: dataSharePredicates.DataSharePredicates): Promise<void>
233
234从数据库中删除符合predicates条件的键值对,使用Promise异步回调。
235
236**模型约束:** 此接口仅可在Stage模型下使用
237
238**系统接口:** 此接口为系统接口。
239
240**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider
241
242**参数:**
243
244| 参数名     | 类型                                                     | 必填 | 说明                                            |
245| ---------- | ------------------------------------------------------------ | ---- | ----------------------------------------------- |
246| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | 是   | 指示筛选条件,当此参数为null时,应定义处理逻辑。 |
247
248**返回值:**
249
250| 类型                | 说明                      |
251| ------------------- | ------------------------- |
252| Promise<void> | 无返回结果的Promise对象。 |
253
254**错误码:**
255
256以下错误码的详细介绍请参见[分布式键值数据库错误码](errorcode-distributedKVStore.md)。
257
258| **错误码ID** | **错误信息**                             |
259| ------------ | ---------------------------------------- |
260| 401          | Parameter error.Possible causes:1.Mandatory parameters are left unspecified; 2.Incorrect parameters types.|
261| 202          | Permission verification failed, application which is not a system application uses system API.|
262| 15100003     | Database corrupted.                      |
263| 15100005     | Database or result set already closed.   |
264
265以下错误码的详细介绍请参见[关系型数据库错误码](errorcode-data-rdb.md)。
266
267| **错误码ID** | **错误信息**                                 |
268| ------------ | -------------------------------------------- |
269| 14800047     | The WAL file size exceeds the default limit. |
270
271**示例:**
272
273```ts
274import { dataSharePredicates } from '@kit.ArkData';
275import { BusinessError } from '@kit.BasicServicesKit';
276
277try {
278  let predicates = new dataSharePredicates.DataSharePredicates();
279  let arr = ["name"];
280  predicates.inKeys(arr);
281  kvStore.put("name", "bob").then(() => {
282    console.info(`Succeeded in putting data`);
283    if (kvStore != null) {
284      kvStore.delete(predicates).then(() => {
285        console.info('Succeeded in deleting');
286      }).catch((err: BusinessError) => {
287        console.error(`Failed to delete.code is ${err.code},message is ${err.message}`);
288      });
289    }
290  }).catch((err: BusinessError) => {
291    console.error(`Failed to put.code is ${err.code},message is ${err.message}`);
292  });
293} catch (e) {
294  let error = e as BusinessError;
295  console.error(`An unexpected error occurred.code is ${error.code},message is ${error.message}`);
296}
297```
298
299### getResultSet
300
301getResultSet(predicates: dataSharePredicates.DataSharePredicates, callback: AsyncCallback<KVStoreResultSet>): void
302
303获取与指定Predicate对象匹配的KVStoreResultSet对象,使用callback异步回调。
304
305**模型约束:** 此接口仅可在Stage模型下使用
306
307**系统接口:** 此接口为系统接口。
308
309**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider
310
311**参数:**
312
313| 参数名     | 类型                                                     | 必填 | 说明                                                         |
314| ---------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
315| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | 是   | 指示筛选条件,当此参数为null时,应定义处理逻辑。              |
316| callback   | AsyncCallback<[KVStoreResultSet](js-apis-distributedKVStore.md#kvstoreresultset)>   | 是   | 回调函数,获取与指定Predicates对象匹配的KVStoreResultSet对象。 |
317
318**错误码:**
319
320以下错误码的详细介绍请参见[分布式键值数据库错误码](errorcode-distributedKVStore.md)。
321
322| **错误码ID** | **错误信息**                           |
323| ------------ | -------------------------------------- |
324| 401          | Parameter error.Possible causes:1.Mandatory parameters are left unspecified; 2.Incorrect parameters types.|
325| 202          | Permission verification failed, application which is not a system application uses system API.|
326| 15100001     | Over max  limits.                      |
327| 15100003     | Database corrupted.                    |
328| 15100005     | Database or result set already closed. |
329
330**示例:**
331
332```ts
333import { dataSharePredicates } from '@kit.ArkData';
334import { BusinessError } from '@kit.BasicServicesKit';
335
336try {
337  let resultSet: distributedKVStore.KVStoreResultSet;
338  let predicates = new dataSharePredicates.DataSharePredicates();
339  predicates.prefixKey("batch_test_string_key");
340  kvStore.getResultSet(predicates, async (err: BusinessError, result: distributedKVStore.KVStoreResultSet) => {
341    if (err != undefined) {
342      console.error(`Failed to get resultset.code is ${err.code},message is ${err.message}`);
343      return;
344    }
345    console.info('Succeeded in getting result set');
346    resultSet = result;
347    if (kvStore != null) {
348      kvStore.closeResultSet(resultSet, (err: BusinessError) => {
349        if (err != undefined) {
350          console.error(`Failed to close resultset.code is ${err.code},message is ${err.message}`);
351          return;
352        }
353        console.info('Succeeded in closing result set');
354      });
355    }
356  });
357} catch (e) {
358  let error = e as BusinessError;
359  console.error(`An unexpected error occurred.code is ${error.code},message is ${error.code}`);
360}
361```
362
363### getResultSet
364
365getResultSet(predicates: dataSharePredicates.DataSharePredicates): Promise<KVStoreResultSet>
366
367获取与指定Predicate对象匹配的KVStoreResultSet对象,使用Promise异步回调。
368
369**模型约束:** 此接口仅可在Stage模型下使用
370
371**系统接口:** 此接口为系统接口。
372
373**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider
374
375**参数:**
376
377| 参数名     | 类型                                                     | 必填 | 说明                                            |
378| ---------- | ------------------------------------------------------------ | ---- | ----------------------------------------------- |
379| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | 是   | 指示筛选条件,当此参数为null时,应定义处理逻辑。 |
380
381**返回值:**
382
383| 类型                                                 | 说明                      |
384| ---------------------------------------------------- | ------------------------- |
385| Promise<[KVStoreResultSet](js-apis-distributedKVStore.md#kvstoreresultset)> | 无返回结果的Promise对象。 |
386
387**错误码:**
388
389以下错误码的详细介绍请参见[分布式键值数据库错误码](errorcode-distributedKVStore.md)。
390
391| **错误码ID** | **错误信息**                           |
392| ------------ | -------------------------------------- |
393| 401          | Parameter error.Possible causes:1.Mandatory parameters are left unspecified; 2.Incorrect parameters types.|
394| 202          | Permission verification failed, application which is not a system application uses system API.|
395| 15100001     | Over max  limits.                      |
396| 15100003     | Database corrupted.                    |
397| 15100005     | Database or result set already closed. |
398
399**示例:**
400
401```ts
402import { dataSharePredicates } from '@kit.ArkData';
403import { BusinessError } from '@kit.BasicServicesKit';
404
405try {
406  let resultSet: distributedKVStore.KVStoreResultSet;
407  let predicates = new dataSharePredicates.DataSharePredicates();
408  predicates.prefixKey("batch_test_string_key");
409  kvStore.getResultSet(predicates).then((result: distributedKVStore.KVStoreResultSet) => {
410    console.info('Succeeded in getting result set');
411    resultSet = result;
412    if (kvStore != null) {
413      kvStore.closeResultSet(resultSet).then(() => {
414        console.info('Succeeded in closing result set');
415      }).catch((err: BusinessError) => {
416        console.error(`Failed to close resultset.code is ${err.code},message is ${err.message}`);
417      });
418    }
419  }).catch((err: BusinessError) => {
420    console.error(`Failed to get resultset.code is ${err.code},message is ${err.message}`);
421  });
422
423} catch (e) {
424  let error = e as BusinessError;
425  console.error(`An unexpected error occurred.code is ${error.code},message is ${error.code}`);
426}
427```
428
429## DeviceKVStore
430
431设备协同数据库,继承自SingleKVStore,提供查询数据和同步数据的方法。
432
433设备协同数据库,以设备维度对数据进行区分,每台设备仅能写入和修改本设备的数据,其它设备的数据对其是只读的,无法修改其它设备的数据。
434
435比如,可以使用设备协同数据库实现设备间的图片分享,可以查看其他设备的图片,但无法修改和删除其他设备的图片。
436
437在调用DeviceKVStore的方法前,需要先通过[getKVStore](js-apis-distributedKVStore.md#getkvstore)构建一个DeviceKVStore实例。
438
439### getResultSet
440
441getResultSet(predicates: dataSharePredicates.DataSharePredicates, callback: AsyncCallback<KVStoreResultSet>): void
442
443获取与本设备指定Predicate对象匹配的KVStoreResultSet对象,使用callback异步回调。
444
445**模型约束:** 此接口仅可在Stage模型下使用
446
447**系统接口:** 此接口为系统接口。
448
449**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider
450
451**参数:**
452
453| 参数名     | 类型                                                         | 必填 | 说明                                                         |
454| ---------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
455| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | 是   | 指示筛选条件,当此参数为null时,应定义处理逻辑。              |
456| callback   | AsyncCallback<[KVStoreResultSet](js-apis-distributedKVStore.md#kvstoreresultset)>   | 是   | 回调函数,获取与指定Predicates对象匹配的KVStoreResultSet对象。 |
457
458**错误码:**
459
460以下错误码的详细介绍请参见[分布式键值数据库错误码](errorcode-distributedKVStore.md)。
461
462| **错误码ID** | **错误信息**                           |
463| ------------ | -------------------------------------- |
464| 401          | Parameter error.Possible causes:1.Mandatory parameters are left unspecified; 2.Incorrect parameters types.|
465| 202          | Permission verification failed, application which is not a system application uses system API.|
466| 15100001     | Over max  limits.                      |
467| 15100003     | Database corrupted.                    |
468| 15100005     | Database or result set already closed. |
469
470**示例:**
471
472```ts
473import { dataSharePredicates } from '@kit.ArkData';
474import { BusinessError } from '@kit.BasicServicesKit';
475
476try {
477  let resultSet: distributedKVStore.KVStoreResultSet;
478  let predicates = new dataSharePredicates.DataSharePredicates();
479  predicates.prefixKey("batch_test_string_key");
480  kvStore.getResultSet(predicates, async (err: BusinessError, result: distributedKVStore.KVStoreResultSet) => {
481    if (err != undefined) {
482      console.error(`Failed to get resultset.code is ${err.code},message is ${err.message}`);
483      return;
484    }
485    console.info('Succeeded in getting result set');
486    resultSet = result;
487    if (kvStore != null) {
488      kvStore.closeResultSet(resultSet, (err: BusinessError) => {
489        if (err != undefined) {
490          console.error(`Failed to close resultset.code is ${err.code},message is ${err.message}`);
491          return;
492        }
493        console.info('Succeeded in closing result set');
494      })
495    }
496  });
497} catch (e) {
498  let error = e as BusinessError;
499  console.error(`An unexpected error occurred.code is ${error.code},message is ${error.code}`);
500}
501```
502
503### getResultSet
504
505getResultSet(predicates: dataSharePredicates.DataSharePredicates): Promise<KVStoreResultSet>
506
507获取与本设备指定Predicate对象匹配的KVStoreResultSet对象,使用Promise异步回调。
508
509**模型约束:** 此接口仅可在Stage模型下使用
510
511**系统接口:** 此接口为系统接口。
512
513**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider
514
515**参数:**
516
517| 参数名     | 类型                                                         | 必填 | 说明                                            |
518| ---------- | ------------------------------------------------------------ | ---- | ----------------------------------------------- |
519| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | 是   | 指示筛选条件,当此参数为null时,应定义处理逻辑。 |
520
521**返回值:**
522
523| 类型                                                 | 说明                      |
524| ---------------------------------------------------- | ------------------------- |
525| Promise<[KVStoreResultSet](js-apis-distributedKVStore.md#kvstoreresultset)> | 无返回结果的Promise对象。 |
526
527**错误码:**
528
529以下错误码的详细介绍请参见[分布式键值数据库错误码](errorcode-distributedKVStore.md)。
530
531| **错误码ID** | **错误信息**                           |
532| ------------ | -------------------------------------- |
533| 401          | Parameter error.Possible causes:1.Mandatory parameters are left unspecified; 2.Incorrect parameters types.|
534| 202          | Permission verification failed, application which is not a system application uses system API.|
535| 15100001     | Over max  limits.                      |
536| 15100003     | Database corrupted.                    |
537| 15100005     | Database or result set already closed. |
538
539**示例:**
540
541```ts
542import { dataSharePredicates } from '@kit.ArkData';
543import { BusinessError } from '@kit.BasicServicesKit';
544
545try {
546  let resultSet: distributedKVStore.KVStoreResultSet;
547  let predicates = new dataSharePredicates.DataSharePredicates();
548  predicates.prefixKey("batch_test_string_key");
549  kvStore.getResultSet(predicates).then((result: distributedKVStore.KVStoreResultSet) => {
550    console.info('Succeeded in getting result set');
551    resultSet = result;
552    if (kvStore != null) {
553      kvStore.closeResultSet(resultSet).then(() => {
554        console.info('Succeeded in closing result set');
555      }).catch((err: BusinessError) => {
556        console.error(`Failed to close resultset.code is ${err.code},message is ${err.message}`);
557      });
558    }
559  }).catch((err: BusinessError) => {
560    console.error(`Failed to get resultset.code is ${err.code},message is ${err.message}`);
561  });
562} catch (e) {
563  let error = e as BusinessError;
564  console.error(`An unexpected error occurred.code is ${error.code},message is ${error.code}`);
565}
566```
567
568### getResultSet
569
570getResultSet(deviceId: string, predicates: dataSharePredicates.DataSharePredicates, callback: AsyncCallback<KVStoreResultSet>): void
571
572获取与指定Predicate对象匹配的KVStoreResultSet对象,使用callback异步回调。
573> **说明:** 
574>
575> 其中deviceId通过调用[deviceManager.getAvailableDeviceListSync](../apis-distributedservice-kit/js-apis-distributedDeviceManager.md#getavailabledevicelistsync)方法得到。
576> deviceId具体获取方式请参考[sync接口示例](js-apis-distributedKVStore.md#sync)。
577
578**模型约束:** 此接口仅可在Stage模型下使用
579
580**系统接口:** 此接口为系统接口。
581
582**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider
583
584**参数:**
585
586| 参数名     | 类型                                                     | 必填 | 说明                                                         |
587| ---------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
588| deviceId  | string                                                       | 是   | 标识要查询其数据的设备。                                     |
589| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | 是   | 指示筛选条件,当此参数为null时,应定义处理逻辑。              |
590| callback   | AsyncCallback<[KVStoreResultSet](js-apis-distributedKVStore.md#kvstoreresultset)>   | 是   | 回调函数,获取与指定Predicates对象匹配的KVStoreResultSet对象。 |
591
592**错误码:**
593
594以下错误码的详细介绍请参见[分布式键值数据库错误码](errorcode-distributedKVStore.md)。
595
596| **错误码ID** | **错误信息**                           |
597| ------------ | -------------------------------------- |
598| 401          | Parameter error.Possible causes:1.Mandatory parameters are left unspecified; 2.Incorrect parameters types.|
599| 202          | Permission verification failed, application which is not a system application uses system API.|
600| 15100001     | Over max  limits.                      |
601| 15100003     | Database corrupted.                    |
602| 15100005     | Database or result set already closed. |
603
604**示例:**
605
606```ts
607import { dataSharePredicates } from '@kit.ArkData';
608import { BusinessError } from '@kit.BasicServicesKit';
609
610try {
611  let resultSet: distributedKVStore.KVStoreResultSet;
612  let predicates = new dataSharePredicates.DataSharePredicates();
613  predicates.prefixKey("batch_test_string_key");
614  kvStore.getResultSet('localDeviceId', predicates, async (err: BusinessError, result: distributedKVStore.KVStoreResultSet) => {
615    if (err != undefined) {
616      console.error(`Failed to get resultset.code is ${err.code},message is ${err.message}`);
617      return;
618    }
619    console.info('Succeeded in getting result set');
620    resultSet = result;
621    if (kvStore != null) {
622      kvStore.closeResultSet(resultSet, (err: BusinessError) => {
623        if (err != undefined) {
624          console.error(`Failed to close resultset.code is ${err.code},message is ${err.message}`);
625          return;
626        }
627        console.info('Succeeded in closing result set');
628      })
629    }
630  });
631} catch (e) {
632  let error = e as BusinessError;
633  console.error(`An unexpected error occurred.code is ${error.code},message is ${error.code}`);
634}
635```
636
637### getResultSet
638
639getResultSet(deviceId: string, predicates: dataSharePredicates.DataSharePredicates): Promise<KVStoreResultSet>
640
641获取与指定Predicate对象匹配的KVStoreResultSet对象,使用Promise异步回调。
642> **说明:** 
643>
644> 其中deviceId通过调用[deviceManager.getAvailableDeviceListSync](../apis-distributedservice-kit/js-apis-distributedDeviceManager.md#getavailabledevicelistsync)方法得到。
645> deviceId具体获取方式请参考[sync接口示例](js-apis-distributedKVStore.md#sync)。
646
647**模型约束:** 此接口仅可在Stage模型下使用
648
649**系统接口:** 此接口为系统接口。
650
651**系统能力:** SystemCapability.DistributedDataManager.DataShare.Provider
652
653**参数:**
654
655| 参数名     | 类型                                                     | 必填 | 说明                                            |
656| ---------- | ------------------------------------------------------------ | ---- | ----------------------------------------------- |
657| deviceId  | string                                                       | 是   | 标识要查询其数据的设备。                                     |
658| predicates | [dataSharePredicates.DataSharePredicates](js-apis-data-dataSharePredicates.md#datasharepredicates) | 是   | 指示筛选条件,当此参数为null时,应定义处理逻辑。 |
659
660**返回值:**
661
662| 类型                                                 | 说明                      |
663| ---------------------------------------------------- | ------------------------- |
664| Promise<[KVStoreResultSet](js-apis-distributedKVStore.md#kvstoreresultset)> | 无返回结果的Promise对象。 |
665
666**错误码:**
667
668以下错误码的详细介绍请参见[分布式键值数据库错误码](errorcode-distributedKVStore.md)。
669
670| **错误码ID** | **错误信息**                           |
671| ------------ | -------------------------------------- |
672| 401          | Parameter error.Possible causes:1.Mandatory parameters are left unspecified; 2.Incorrect parameters types.|
673| 202          | Permission verification failed, application which is not a system application uses system API.|
674| 15100001     | Over max  limits.                      |
675| 15100003     | Database corrupted.                    |
676| 15100005     | Database or result set already closed. |
677
678**示例:**
679
680```ts
681import { dataSharePredicates } from '@kit.ArkData';
682import { BusinessError } from '@kit.BasicServicesKit';
683
684try {
685  let resultSet: distributedKVStore.KVStoreResultSet;
686  let predicates = new dataSharePredicates.DataSharePredicates();
687  predicates.prefixKey("batch_test_string_key");
688  kvStore.getResultSet('localDeviceId', predicates).then((result: distributedKVStore.KVStoreResultSet) => {
689    console.info('Succeeded in getting result set');
690    resultSet = result;
691    if (kvStore != null) {
692      kvStore.closeResultSet(resultSet).then(() => {
693        console.info('Succeeded in closing result set');
694      }).catch((err: BusinessError) => {
695        console.error(`Failed to close resultset.code is ${err.code},message is ${err.message}`);
696      });
697    }
698  }).catch((err: BusinessError) => {
699    console.error(`Failed to get resultset.code is ${err.code},message is ${err.message}`);
700  });
701} catch (e) {
702  let error = e as BusinessError;
703  console.error(`An unexpected error occurred.code is ${error.code},message is ${error.code}`);
704}
705```