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