• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.data.distributedData (分布式数据管理)
2<!--Kit: ArkData-->
3<!--Subsystem: DistributedDataManager-->
4<!--Owner: @ding_dong_dong-->
5<!--Designer: @dboy190; @houpengtao1-->
6<!--Tester: @logic42-->
7<!--Adviser: @ge-yafang-->
8
9分布式数据管理为应用程序提供不同设备间数据库的分布式协同能力。通过调用分布式数据各个接口,应用程序可将数据保存到分布式数据库中,并可对分布式数据库中的数据进行增加、删除、修改、查询、同步等操作。
10
11该模块提供以下分布式数据管理相关的常用功能:
12
13- [KVManager](#kvmanager):数据管理实例,用于获取KVStore的相关信息。
14- [KvStoreResultSet<sup>8+</sup>](#kvstoreresultset8):提供获取KVStore数据库结果集的相关方法,包括查询和移动数据读取位置等。
15- [Query<sup>8+</sup>](#query8):使用谓词表示数据库查询,提供创建Query实例、查询数据库中的数据和添加谓词的方法。
16- [KVStore](#kvstore):KVStore数据库实例,提供增加数据、删除数据和订阅数据变更、订阅数据同步完成的方法。
17- [SingleKVStore](#singlekvstore):单版本分布式数据库,继承自[KVStore](#kvstore),不对数据所属设备进行区分,提供查询数据和同步数据的方法。
18- [DeviceKVStore<sup>8+</sup>](#devicekvstore8):设备协同数据库,继承自[KVStore](#kvstore),以设备维度对数据进行区分,提供查询数据和同步数据的方法。
19
20>**说明:**
21>
22>- 从API Version 9开始,该接口不再维护,推荐使用新接口[`@ohos.data.distributedKVStore`](js-apis-distributedKVStore.md)。
23>
24>- 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
25>
26>- 本模块中所有需要获取deviceId的接口,都仅系统应用可用。
27
28
29## 导入模块
30
31```js
32import distributedData from '@ohos.data.distributedData';
33```
34
35
36## distributedData.createKVManager
37
38createKVManager(config: KVManagerConfig, callback: AsyncCallback&lt;KVManager&gt;): void
39
40创建一个KVManager对象实例,用于管理数据库对象,使用callback异步回调。
41
42**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
43
44**参数:**
45
46| 参数名 | 类型 | 必填 | 说明 |
47| ----- | ------ | ------ | ------ |
48| config | [KVManagerConfig](#kvmanagerconfig) | 是  | 提供KVManager实例的配置信息,包括调用方的Bundle名称和用户信息。 |
49| callback | AsyncCallback&lt;[KVManager](#kvmanager)&gt; | 是  | 回调函数。返回创建的KVManager对象实例。 |
50
51**示例:**
52```js
53
54let kvManager;
55try {
56    const kvManagerConfig = {
57        bundleName : 'com.example.datamanagertest',
58        userInfo : {
59            userId : '0',
60            userType : distributedData.UserType.SAME_USER_ID
61        }
62    }
63    distributedData.createKVManager(kvManagerConfig, function (err, manager) {
64        if (err) {
65            console.log("Failed to create KVManager: "  + JSON.stringify(err));
66            return;
67        }
68        console.log("Succeeded in creating KVManager");
69        kvManager = manager;
70    });
71} catch (e) {
72    console.log("An unexpected error occurred. Error:" + e);
73}
74```
75
76## distributedData.createKVManager
77
78createKVManager(config: KVManagerConfig): Promise&lt;KVManager&gt;
79
80创建一个KVManager对象实例,用于管理数据库对象,使用Promise异步回调。
81
82**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
83
84**参数:**
85
86| 参数名 | 类型 | 必填 | 说明 |
87| ----- | ------ | ------ | ------ |
88| config |[KVManagerConfig](#kvmanager) | 是  | 提供KVManager实例的配置信息,包括调用方的包名和用户信息。 |
89
90**返回值:**
91
92| 类型 | 说明 |
93| -------- | -------- |
94| Promise&lt;[KVManager](#kvmanager)&gt; | Promise对象。返回创建的KVManager对象实例。 |
95
96**示例:**
97```js
98
99try {
100  const kvManagerConfig = {
101    bundleName: 'com.example.datamanagertest',
102    userInfo: {
103      userId: '0',
104      userType: distributedData.UserType.SAME_USER_ID
105    }
106  }
107  distributedData.createKVManager(kvManagerConfig).then((manager) => {
108    console.log("Succeeded in creating KVManager");
109    kvManager = manager;
110  }).catch((err) => {
111    console.error("Failed to create KVManager: " + JSON.stringify(err));
112  });
113} catch (e) {
114  console.log("An unexpected error occurred. Error:" + e);
115}
116```
117
118## KVManagerConfig
119
120提供KVManager实例的配置信息,包括调用方的Bundle名称和用户信息。
121
122**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
123
124| 名称 | 类型 | 必填 | 说明 |
125| ----- | ------ | ------ | ------ |
126| userInfo | [UserInfo](#userinfo) | 是  | 调用方的用户信息。 |
127| bundleName | string | 是  | 调用方的Bundle名称。 |
128
129## UserInfo
130
131用户信息。
132
133**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
134
135| 名称 | 类型 | 必填 | 说明 |
136| ----- | ------ |------ | ------ |
137| userId | string | 否  | 指示要设置的用户ID,默认为'0'。 |
138| userType | [UserType](#usertype) | 否  | 指示要设置的用户类型,默认为0。 |
139
140
141## UserType
142
143用户类型枚举。
144
145**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
146
147| 名称 | 值 | 说明 |
148| ----- | ------ | ------ |
149| SAME_USER_ID | 0 | 使用同一账号登录不同设备的用户。 |
150
151
152## KVManager
153
154数据管理实例,用于获取KVStore的相关信息。在调用KVManager的方法前,需要先通过[createKVManager](#distributeddatacreatekvmanager)构建一个KVManager实例。
155
156### getKVStore
157
158getKVStore&lt;T extends KVStore&gt;(storeId: string, options: Options, callback: AsyncCallback&lt;T&gt;): void
159
160通过指定Options和storeId,创建并获取KVStore数据库,使用callback异步回调。
161
162**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
163
164**参数:**
165
166| 参数名 | 类型 | 必填 | 说明 |
167| ----- | ------ | ------ | ------ |
168| storeId | string | 是  | 数据库唯一标识符,长度不大于[MAX_STORE_ID_LENGTH](#constants)。 |
169| options | [Options](#options) | 是  | 创建KVStore实例的配置信息。 |
170| callback | AsyncCallback&lt;T&gt; | 是  | 回调函数。返回创建的KVStore数据库实例。 |
171
172**示例:**
173
174```js
175let kvStore;
176let kvManager;
177try {
178    const options = {
179        createIfMissing : true,
180        encrypt : false,
181        backup : false,
182        autoSync : true,
183        kvStoreType : distributedData.KVStoreType.SINGLE_VERSION,
184        securityLevel : distributedData.SecurityLevel.S3,
185    };
186    kvManager.getKVStore('storeId', options, function (err, store) {
187        if (err) {
188            console.log("getKVStore err: "  + JSON.stringify(err));
189            return;
190        }
191        console.log("getKVStore success");
192        kvStore = store;
193    });
194} catch (e) {
195    console.log("An unexpected error occurred. Error:" + e);
196}
197```
198
199
200### getKVStore
201
202getKVStore&lt;T extends KVStore&gt;(storeId: string, options: Options): Promise&lt;T&gt;
203
204通过指定Options和storeId,创建并获取KVStore数据库,使用Promise异步回调。
205
206**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
207
208**参数:**
209
210| 参数名   | 类型                | 必填  | 说明    |
211| ------- | ---------------------- | ---- | -------------------- |
212| storeId  | string      | 是   | 数据库唯一标识符,长度不大于[MAX_STORE_ID_LENGTH](#constants)。 |
213| options  | [Options](#options)   | 是   | 创建KVStore实例的配置信息。|
214
215
216**返回值:**
217
218| 类型                                    | 说明        |
219| -------------------------------------- | ------------------------ |
220| Promise&lt;T&gt; ,&lt;T extends [KVStore](#kvstore)&gt; | Promise对象。返回创建的KVStore数据库实例。 |
221
222**示例:**
223
224```js
225let kvStore;
226let kvManager;
227try {
228    const options = {
229        createIfMissing : true,
230        encrypt : false,
231        backup : false,
232        autoSync : true,
233        kvStoreType : distributedData.KVStoreType.SINGLE_VERSION,
234        securityLevel : distributedData.SecurityLevel.S3,
235    };
236    kvManager.getKVStore('storeId', options).then((store) => {
237        console.log("getKVStore success");
238        kvStore = store;
239    }).catch((err) => {
240        console.log("getKVStore err: "  + JSON.stringify(err));
241    });
242} catch (e) {
243    console.log("An unexpected error occurred. Error:" + e);
244}
245```
246
247### closeKVStore<sup>8+</sup>
248
249closeKVStore(appId: string, storeId: string, kvStore: KVStore, callback: AsyncCallback&lt;void&gt;): void
250
251通过storeId的值关闭指定的KVStore数据库,使用callback异步回调。
252
253**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
254
255**参数:**
256
257
258| 参数名   | 类型              | 必填 | 说明         |
259| ------- | -----------------   | ---- | --------------------------- |
260| appId    | string              | 是   | 所调用数据库方的包名。         |
261| storeId  | string  | 是   | 要关闭的数据库唯一标识符,长度不大于[MAX_STORE_ID_LENGTH](#constants)。 |
262| kvStore  | [KVStore](#kvstore) | 是   | 要关闭的KVStore数据库。     |
263| callback | AsyncCallback&lt;void&gt; | 是   | 回调函数。 |
264
265**示例:**
266
267```js
268let kvStore;
269let kvManager;
270const options = {
271    createIfMissing: true,
272    encrypt: false,
273    backup: false,
274    autoSync: false,
275    kvStoreType: distributedData.KVStoreType.SINGLE_VERSION,
276    schema: undefined,
277    securityLevel: distributedData.SecurityLevel.S3,
278}
279try {
280    kvManager.getKVStore('storeId', options, async function (err, store) {
281        console.log('getKVStore success');
282        kvStore = store;
283        kvManager.closeKVStore('appId', 'storeId', kvStore, function (err, data) {
284            console.log('closeKVStore success');
285        });
286    });
287} catch (e) {
288    console.log('closeKVStore e ' + e);
289}
290```
291
292
293### closeKVStore<sup>8+</sup>
294
295closeKVStore(appId: string, storeId: string, kvStore: KVStore): Promise&lt;void&gt;
296
297通过storeId的值关闭指定的KVStore数据库,使用Promise异步回调。
298
299**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
300
301**参数:**
302
303| 参数名  | 类型 | 必填  | 说明        |
304| -----  | ------  | ---- | ----------------------------- |
305| appId  | string  | 是   | 所调用数据库方的包名。            |
306| storeId | string | 是   | 要关闭的数据库唯一标识符,长度不大于[MAX_STORE_ID_LENGTH](#constants)。 |
307| kvStore | [KVStore](#kvstore)  | 是   | 要关闭的KVStore数据库。        |
308
309**返回值:**
310
311| 类型          | 说明            |
312| ------------- | -------------- |
313| Promise\<void> | 无返回结果的Promise对象。 |
314
315**示例:**
316
317```js
318let kvManager;
319let kvStore;
320const options = {
321    createIfMissing: true,
322    encrypt: false,
323    backup: false,
324    autoSync: false,
325    kvStoreType: distributedData.KVStoreType.SINGLE_VERSION,
326    schema: undefined,
327    securityLevel: distributedData.SecurityLevel.S3,
328}
329try {
330    kvManager.getKVStore('storeId', options).then(async (store) => {
331        console.log('getKVStore success');
332        kvStore = store;
333        kvManager.closeKVStore('appId', 'storeId', kvStore).then(() => {
334            console.log('closeKVStore success');
335        }).catch((err) => {
336            console.log('closeKVStore err ' + JSON.stringify(err));
337        });
338    }).catch((err) => {
339        console.log('CloseKVStore getKVStore err ' + JSON.stringify(err));
340    });
341} catch (e) {
342    console.log('closeKVStore e ' + e);
343}
344```
345
346
347### deleteKVStore<sup>8+</sup>
348
349deleteKVStore(appId: string, storeId: string, callback: AsyncCallback&lt;void&gt;): void
350
351通过storeId的值删除指定的KVStore数据库,使用callback异步回调。
352
353**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
354
355**参数:**
356
357| 参数名  | 类型 | 必填  | 说明                    |
358| -----  | ------  | ----  | ----------------------- |
359| appId  | string  | 是   | 所调用数据库方的包名。     |
360| storeId | string | 是   | 要删除的数据库唯一标识符,长度不大于[MAX_STORE_ID_LENGTH](#constants)。 |
361| callback | AsyncCallback&lt;void&gt;  | 是   | 回调函数。 |
362
363**示例:**
364
365```js
366let kvManager;
367let kvStore;
368const options = {
369    createIfMissing : true,
370    encrypt : false,
371    backup : false,
372    autoSync : true,
373    kvStoreType : distributedData.KVStoreType.SINGLE_VERSION,
374    schema : undefined,
375    securityLevel : distributedData.SecurityLevel.S3,
376}
377try {
378    kvManager.getKVStore('store', options, async function (err, store) {
379        console.log('getKVStore success');
380        kvStore = store;
381        kvManager.deleteKVStore('appId', 'storeId', function (err, data) {
382            console.log('deleteKVStore success');
383        });
384    });
385} catch (e) {
386    console.log('DeleteKVStore e ' + e);
387}
388```
389
390### deleteKVStore<sup>8+</sup>
391
392deleteKVStore(appId: string, storeId: string): Promise&lt;void&gt;
393
394通过storeId的值删除指定的KVStore数据库,使用Promise异步回调。
395
396**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
397
398**参数:**
399
400| 参数名  | 类型 | 必填  | 说明                    |
401| -----  | ------  | ----  | ----------------------- |
402| appId  | string  | 是   | 所调用数据库方的包名。     |
403| storeId | string | 是   | 要删除的数据库唯一标识符,长度不大于[MAX_STORE_ID_LENGTH](#constants)。 |
404
405
406**返回值:**
407
408| 类型          | 说明            |
409| ------------- | -------------- |
410| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
411
412**示例:**
413
414```js
415let kvManager;
416let kvStore;
417const options = {
418    createIfMissing : true,
419    encrypt : false,
420    backup : false,
421    autoSync : true,
422    kvStoreType : distributedData.KVStoreType.SINGLE_VERSION,
423    schema : undefined,
424    securityLevel : distributedData.SecurityLevel.S3,
425}
426try {
427    kvManager.getKVStore('storeId', options).then(async (store) => {
428        console.log('getKVStore success');
429        kvStore = store;
430        kvManager.deleteKVStore('appId', 'storeId').then(() => {
431            console.log('deleteKVStore success');
432        }).catch((err) => {
433            console.log('deleteKVStore err ' + JSON.stringify(err));
434        });
435    }).catch((err) => {
436        console.log('getKVStore err ' + JSON.stringify(err));
437    });
438} catch (e) {
439    console.log('deleteKVStore e ' + e);
440}
441```
442
443
444### getAllKVStoreId<sup>8+</sup>
445
446getAllKVStoreId(appId: string, callback: AsyncCallback&lt;string[]&gt;): void
447
448获取所有通过[getKVStore](#getkvstore)方法创建的且没有调用[deleteKVStore](#deletekvstore8)方法删除的KVStore数据库的storeId,使用callback异步回调。
449
450**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
451
452**参数:**
453
454| 参数名  | 类型 | 必填  | 说明                    |
455| -----  | ------  | ----  | ----------------------- |
456| appId  | string  | 是    | 所调用数据库方的包名。     |
457| callback | AsyncCallback&lt;string[]&gt; | 是   |回调函数。返回所有创建的KvStore数据库的storeId。 |
458
459**示例:**
460
461```js
462let kvManager;
463try {
464    kvManager.getAllKVStoreId('appId', function (err, data) {
465        console.log('GetAllKVStoreId success');
466        console.log('GetAllKVStoreId size = ' + data.length);
467    });
468} catch (e) {
469    console.log('GetAllKVStoreId e ' + e);
470}
471```
472
473
474### getAllKVStoreId<sup>8+</sup>
475
476getAllKVStoreId(appId: string): Promise&lt;string[]&gt;
477
478获取所有通过[getKVStore](#getkvstore)方法创建的且没有调用[deleteKVStore](#deletekvstore8)方法删除的KVStore数据库的storeId,使用Promise异步回调。
479
480**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
481
482**参数:**
483
484| 参数名  | 类型 | 必填  | 说明                    |
485| -----  | ------  | ----  | ----------------------- |
486| appId  | string  | 是    | 所调用数据库方的包名。     |
487
488
489**返回值:**
490
491| 类型          | 说明            |
492| ------------- | -------------- |
493| Promise&lt;string[]&gt;| Promise对象。返回所有创建的KvStore数据库的storeId。 |
494
495**示例:**
496
497```js
498let kvManager;
499try {
500    console.log('GetAllKVStoreId');
501    kvManager.getAllKVStoreId('appId').then((data) => {
502        console.log('getAllKVStoreId success');
503        console.log('size = ' + data.length);
504    }).catch((err) => {
505        console.log('getAllKVStoreId err ' + JSON.stringify(err));
506    });
507} catch(e) {
508    console.log('getAllKVStoreId e ' + e);
509}
510```
511
512
513### on('distributedDataServiceDie')<sup>8+</sup>
514
515on(event: 'distributedDataServiceDie', deathCallback: Callback&lt;void&gt;): void
516
517订阅服务状态变更通知。
518
519**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
520
521**参数:**
522
523| 参数名  | 类型 | 必填  | 说明                    |
524| -----  | ------  | ----  | ----------------------- |
525| event  | string | 是    | 订阅的事件名,固定为'distributedDataServiceDie',即服务状态变更事件。 |
526| deathCallback  | Callback&lt;void&gt;  | 是    | 回调函数。 |
527
528**示例:**
529
530```js
531let kvManager;
532try {
533    console.log('KVManagerOn');
534    const deathCallback = function () {
535        console.log('death callback call');
536    }
537    kvManager.on('distributedDataServiceDie', deathCallback);
538} catch (e) {
539    console.log("An unexpected error occurred. Error:" + e);
540}
541```
542
543
544### off('distributedDataServiceDie')<sup>8+</sup>
545
546off(event: 'distributedDataServiceDie', deathCallback?: Callback&lt;void&gt;): void
547
548取消订阅服务状态变更通知。
549
550**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
551
552**参数:**
553
554| 参数名  | 类型 | 必填  | 说明                    |
555| -----  | ------  | ----  | ----------------------- |
556| event  | string | 是    | 取消订阅的事件名,固定为'distributedDataServiceDie',即服务状态变更事件。 |
557| deathCallback  | Callback&lt;void&gt;  | 否    | 取消订阅的函数。如不设置callback,则取消所有已订阅的函数。 |
558
559
560**示例:**
561
562```js
563let kvManager;
564try {
565    console.log('KVManagerOff');
566    const deathCallback = function () {
567        console.log('death callback call');
568    }
569    kvManager.off('distributedDataServiceDie', deathCallback);
570} catch (e) {
571    console.log("An unexpected error occurred. Error:" + e);
572}
573
574```
575
576## Options
577
578用于提供创建数据库的配置信息。
579
580
581| 名称  | 类型 | 必填   | 说明                    |
582| -----  | ------  | ------  | -------------------|
583| createIfMissing  | boolean | 否 | 当数据库文件不存在时是否创建数据库,默认为true,即创建。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core    |
584| encrypt  | boolean | 否 |设置数据库文件是否加密,默认为false,即不加密。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core     |
585| backup  | boolean | 否 |设置数据库文件是否备份,默认为true,即备份。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core    |
586| autoSync  | boolean | 否 |设置数据库文件是否自动同步。默认为false,即手动同步。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core<br>**需要权限**: ohos.permission.DISTRIBUTED_DATASYNC     |
587| kvStoreType | [KVStoreType](#kvstoretype) | 否 |设置要创建的数据库类型,默认为DEVICE_COLLABORATION,即多设备协同数据库。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core |
588| securityLevel | [SecurityLevel](#securitylevel) | 否 |设置数据库安全级别(S1-S4)。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core  |
589| schema<sup>8+</sup> | [Schema](#schema8) | 否 | 设置定义存储在数据库中的值,默认为undefined,即不使用schema。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.DistributedKVStore |
590
591
592## KVStoreType
593
594KVStore数据库类型枚举。
595
596
597| 名称  | 值 | 说明                    |
598| ---   | ----  | ----------------------- |
599| DEVICE_COLLABORATION  | 0 | 表示多设备协同数据库。<br>**数据库特点:** 数据以设备的维度管理,不存在冲突;支持按照设备的维度查询数据。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.DistributedKVStore   |
600| SINGLE_VERSION  | 1 | 表示单版本数据库。<br>**数据库特点:** 数据不分设备,设备之间修改相同的key会覆盖。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core |
601| MULTI_VERSION   | 2 | 表示多版本数据库。当前暂不支持使用此接口。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.DistributedKVStore |
602
603
604## SecurityLevel
605
606数据库的安全级别枚举。
607
608| 名称  | 值 | 说明                    |
609| ---   | ----  | ----------------------- |
610| NO_LEVEL  | 0 | 表示数据库不设置安全级别(已废弃)。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.DistributedKVStore   |
611| S0  | 1 | 表示数据库的安全级别为公共级别(已废弃)。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core    |
612| S1  | 2 | 表示数据库的安全级别为低级别,当数据泄露时会产生较低影响。例如,包含壁纸等系统数据的数据库。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core    |
613| S2  | 3 | 表示数据库的安全级别为中级别,当数据泄露时会产生较大影响。例如,包含录音、视频等用户生成数据或通话记录等信息的数据库。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core    |
614| S3  | 5 | 表示数据库的安全级别为高级别,当数据泄露时会产生重大影响。例如,包含用户运动、健康、位置等信息的数据库。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core    |
615| S4  | 6 | 表示数据库的安全级别为关键级别,当数据泄露时会产生严重影响。例如,包含认证凭据、财务数据等信息的数据库。<br>**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core    |
616
617
618## Constants
619
620KVStore常量。
621
622**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
623
624| 名称  | 值 | 说明                    |
625| ---   | ----  | ----------------------- |
626| MAX_KEY_LENGTH  | 1024 | 数据库中Key允许的最大长度,单位字节。  |
627| MAX_VALUE_LENGTH  | 4194303 | 数据库中Value允许的最大长度,单位字节。  |
628| MAX_KEY_LENGTH_DEVICE  | 896 | 最大设备密钥长度,单位字节。 |
629| MAX_STORE_ID_LENGTH  | 128 | 数据库标识符允许的最大长度,单位字节。  |
630| MAX_QUERY_LENGTH  | 512000 | 最大查询长度,单位字节。 |
631| MAX_BATCH_SIZE  | 128 | 最大批处理操作数量。 |
632
633## Schema<sup>8+</sup>
634
635表示数据库模式,可以在创建或打开数据库时创建Schema对象并将它们放入[Options](#options)中。
636
637**系统能力:** SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
638
639| 名称  | 类型 | 可读 | 可写 | 说明                    |
640| ---   | ----  | ----  | ----  | ----------------------- |
641| root<sup>8+</sup>  | [FieldNode](#fieldnode8) | 是 | 是 | 表示json根对象。 |
642| indexes<sup>8+</sup>  | Array\<string> | 是 | 是 | 表示json类型的字符串数组。  |
643| mode<sup>8+</sup>  | number | 是 | 是 | 表示Schema的模式。  |
644| skip<sup>8+</sup>  | number | 是 | 是 |  Schema的跳跃大小。  |
645
646### constructor<sup>8+</sup>
647
648constructor()
649
650用于创建Schema实例的构造函数。
651
652**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
653
654## FieldNode<sup>8+</sup>
655
656表示 Schema 实例的节点,提供定义存储在数据库中的值的方法。
657
658**系统能力:** SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
659
660| 名称  | 类型 | 可读 | 可写 | 说明                    |
661| ---   | ----  | ----  | ----  | ----------------------- |
662| nullable<sup>8+</sup>  | boolean | 是 | 是 | 表示数据库字段是否可以为空。   |
663| default<sup>8+</sup>  | string | 是 | 是 | 表示Fieldnode的默认值。 |
664| type<sup>8+</sup>  | number | 是 | 是 | 表示指定节点对应数据类型的值。 |
665
666### constructor<sup>8+</sup>
667
668constructor(name: string)
669
670用于创建带有string字段FieldNode实例的构造函数。
671
672**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
673
674**参数:**
675
676| 参数名 | 类型 | 必填 | 说明            |
677| ------ | -------- | ---- | --------------- |
678| name   | string   | 是   | FieldNode的值。 |
679
680### appendChild<sup>8+</sup>
681
682appendChild(child: FieldNode): boolean
683
684在当前 FieldNode 中添加一个子节点。
685
686**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
687
688**参数:**
689
690| 参数名  | 类型 | 必填  | 说明                    |
691| -----  | ------  | ----  | ----------------------- |
692| child  | [FieldNode](#fieldnode8) | 是    | 要附加的域节点。   |
693
694**返回值:**
695
696| 类型          | 说明            |
697| ------------- | -------------- |
698| boolean |返回true表示子节点成功添加到FieldNode;返回false则表示操作失败。 |
699
700**示例:**
701
702```js
703import ddm from '@ohos.data.distributedData';
704try {
705    let node = new ddm.FieldNode("root");
706    let child1 = new ddm.FieldNode("child1");
707    let child2 = new ddm.FieldNode("child2");
708    let child3 = new ddm.FieldNode("child3");
709    node.appendChild(child1);
710    node.appendChild(child2);
711    node.appendChild(child3);
712    console.log("appendNode " + JSON.stringify(node));
713    child1 = null;
714    child2 = null;
715    child3 = null;
716    node = null;
717} catch (e) {
718    console.log("AppendChild " + e);
719}
720```
721
722
723## KvStoreResultSet<sup>8+</sup>
724
725提供获取KVStore数据库结果集的相关方法,包括查询和移动数据读取位置等。
726
727在调用KvStoreResultSet的方法前,需要先通过[getKVStore](#getkvstore)构建一个KVStore实例。
728
729
730### getCount<sup>8+</sup>
731
732getCount(): number
733
734获取结果集中的总行数。
735
736**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
737
738**返回值:**
739
740| 类型   | 说明               |
741| ------ | --------------    |
742| number |返回数据的总行数。          |
743
744**示例:**
745
746```js
747let kvStore;
748try {
749    let resultSet;
750    kvStore.getResultSet('batch_test_string_key').then((result) => {
751        console.log('getResultSet succeed.');
752        resultSet = result;
753    }).catch((err) => {
754        console.log('getResultSet failed: ' + err);
755    });
756    const count = resultSet.getCount();
757    console.log("getCount succeed:" + count);
758} catch (e) {
759    console.log("getCount failed: " + e);
760}
761```
762
763### getPosition<sup>8+</sup>
764
765getPosition(): number
766
767获取结果集中当前的读取位置。
768
769**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
770
771**返回值:**
772
773| 类型   | 说明               |
774| ------ | --------------    |
775| number |返回当前读取位置。   |
776
777**示例:**
778
779```js
780let kvStore;
781try {
782    let resultSet;
783    kvStore.getResultSet('batch_test_string_key').then((result) => {
784        console.log('getResultSet succeeded.');
785        resultSet = result;
786    }).catch((err) => {
787        console.log('getResultSet failed: ' + err);
788    });
789    const position = resultSet.getPosition();
790    console.log("getPosition succeed:" + position);
791} catch (e) {
792    console.log("getPosition failed: " + e);
793}
794```
795
796
797### moveToFirst<sup>8+</sup>
798
799moveToFirst(): boolean
800
801将读取位置移动到第一行。如果结果集为空,则返回false。
802
803**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
804
805**返回值:**
806
807| 类型    | 说明               |
808| ------  | --------------    |
809| boolean |返回true表示操作成功;返回false则表示操作失败。   |
810
811**示例:**
812
813```js
814let kvStore;
815try {
816    let resultSet;
817    kvStore.getResultSet('batch_test_string_key').then((result) => {
818        console.log('getResultSet succeed.');
819        resultSet = result;
820    }).catch((err) => {
821        console.log('getResultSet failed: ' + err);
822    });
823    const moved1 = resultSet.moveToFirst();
824    console.log("moveToFirst succeed: " + moved1);
825} catch (e) {
826    console.log("moveToFirst failed " + e);
827}
828```
829
830
831### moveToLast<sup>8+</sup>
832
833moveToLast(): boolean
834
835将读取位置移动到最后一行。如果结果集为空,则返回false。
836
837**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
838
839**返回值:**
840
841| 类型    | 说明               |
842| ------  | --------------    |
843| boolean |返回true表示操作成功;返回false则表示操作失败。   |
844
845**示例:**
846
847```js
848let kvStore;
849try {
850    let resultSet;
851    kvStore.getResultSet('batch_test_string_key').then((result) => {
852        console.log('getResultSet succeed.');
853        resultSet = result;
854    }).catch((err) => {
855        console.log('getResultSet failed: ' + err);
856    });
857    const moved2 = resultSet.moveToLast();
858    console.log("moveToLast succeed:" + moved2);
859} catch (e) {
860    console.log("moveToLast failed: " + e);
861}
862```
863
864
865### moveToNext<sup>8+</sup>
866
867moveToNext(): boolean
868
869将读取位置移动到下一行。如果结果集为空,则返回false。
870
871**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
872
873**返回值:**
874
875| 类型    | 说明               |
876| ------  | --------------    |
877| boolean |返回true表示操作成功;返回false则表示操作失败。   |
878
879**示例:**
880
881```js
882let kvStore;
883try {
884    let resultSet;
885    kvStore.getResultSet('batch_test_string_key').then((result) => {
886        console.log('getResultSet succeed.');
887        resultSet = result;
888    }).catch((err) => {
889        console.log('getResultSet failed: ' + err);
890    });
891    const moved3 = resultSet.moveToNext();
892    console.log("moveToNext succeed: " + moved3);
893} catch (e) {
894    console.log("moveToNext failed: " + e);
895}
896```
897
898
899### moveToPrevious<sup>8+</sup>
900
901moveToPrevious(): boolean
902
903将读取位置移动到上一行。如果结果集为空,则返回false。
904
905**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
906
907**返回值:**
908
909| 类型    | 说明               |
910| ------  | --------------    |
911| boolean |返回true表示操作成功;返回false则表示操作失败。   |
912
913**示例:**
914
915```js
916let kvStore;
917try {
918    let resultSet;
919    kvStore.getResultSet('batch_test_string_key').then((result) => {
920        console.log('getResultSet succeed.');
921        resultSet = result;
922    }).catch((err) => {
923        console.log('getResultSet failed: ' + err);
924    });
925    const moved4 = resultSet.moveToPrevious();
926    console.log("moveToPrevious succeed:" + moved4);
927} catch (e) {
928    console.log("moveToPrevious failed: " + e);
929}
930```
931
932
933### move<sup>8+</sup>
934
935move(offset: number): boolean
936
937将读取位置移动到当前位置的相对偏移量。
938
939**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
940
941**参数:**
942
943| 参数名  | 类型 | 必填  | 说明                    |
944| -----  | ------  | ----  | ----------------------- |
945| offset  | number  | 是    | 表示与当前位置的相对偏移量,负偏移表示向后移动,正偏移表示向前移动。   |
946
947**返回值:**
948
949| 类型    | 说明               |
950| ------  | --------------    |
951| boolean |返回true表示操作成功;返回false则表示操作失败。   |
952
953**示例:**
954
955```js
956let kvStore;
957try {
958    let resultSet;
959    kvStore.getResultSet('batch_test_string_key').then((result) => {
960        console.log('getResultSet succeed.');
961        resultSet = result;
962    }).catch((err) => {
963        console.log('getResultSet failed: ' + err);
964    });
965    const moved5 = resultSet.move(1);
966    console.log("move succeed:" + moved5);
967} catch (e) {
968    console.log("move failed: " + e);
969}
970```
971
972
973### moveToPosition<sup>8+</sup>
974
975moveToPosition(position: number): boolean
976
977将读取位置从 0 移动到绝对位置。
978
979**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
980
981**参数:**
982
983| 参数名  | 类型 | 必填  | 说明                    |
984| -----  | ------  | ----  | ----------------------- |
985| position  | number  | 是    |表示绝对位置。          |
986
987**返回值:**
988
989| 类型    | 说明               |
990| ------  | --------------    |
991| boolean |返回true表示操作成功;返回false则表示操作失败。   |
992
993**示例:**
994
995```js
996let kvStore;
997try {
998    let resultSet;
999    kvStore.getResultSet('batch_test_string_key').then((result) => {
1000        console.log('getResultSet succeed.');
1001        resultSet = result;
1002    }).catch((err) => {
1003        console.log('getResultSet failed: ' + err);
1004    });
1005    const moved6 = resultSet.moveToPosition(1);
1006    console.log("moveToPosition succeed: " + moved6);
1007} catch (e) {
1008    console.log("moveToPosition failed: " + e);
1009}
1010```
1011
1012
1013### isFirst<sup>8+</sup>
1014
1015isFirst(): boolean
1016
1017检查读取位置是否为第一行。
1018
1019**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1020
1021**返回值:**
1022
1023| 类型    | 说明               |
1024| ------  | --------------    |
1025| boolean |返回true表示读取位置为第一行;返回false表示读取位置不是第一行。   |
1026
1027**示例:**
1028
1029```js
1030let kvStore;
1031try {
1032    let resultSet;
1033    kvStore.getResultSet('batch_test_string_key').then((result) => {
1034        console.log('getResultSet succeed.');
1035        resultSet = result;
1036    }).catch((err) => {
1037        console.log('getResultSet failed: ' + err);
1038    });
1039    const isfirst = resultSet.isFirst();
1040    console.log("Check isFirst succeed:" + isfirst);
1041} catch (e) {
1042    console.log("Check isFirst failed: " + e);
1043}
1044```
1045
1046
1047### isLast<sup>8+</sup>
1048
1049isLast(): boolean
1050
1051检查读取位置是否为最后一行。
1052
1053**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1054
1055**返回值:**
1056
1057| 类型    | 说明               |
1058| ------  | --------------    |
1059| boolean |返回true表示读取位置为最后一行;返回false表示读取位置不是最后一行。   |
1060
1061**示例:**
1062
1063```js
1064let kvStore;
1065try {
1066    let resultSet;
1067    kvStore.getResultSet('batch_test_string_key').then((result) => {
1068        console.log('getResultSet succeed.');
1069        resultSet = result;
1070    }).catch((err) => {
1071        console.log('getResultSet failed: ' + err);
1072    });
1073    const islast = resultSet.isLast();
1074    console.log("Check isLast succeed: " + islast);
1075} catch (e) {
1076    console.log("Check isLast failed: " + e);
1077}
1078```
1079
1080### isBeforeFirst<sup>8+</sup>
1081
1082isBeforeFirst(): boolean
1083
1084检查读取位置是否在第一行之前。
1085
1086**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1087
1088**返回值:**
1089
1090| 类型    | 说明               |
1091| ------  | --------------    |
1092| boolean |返回true表示读取位置在第一行之前;返回false表示读取位置不在第一行之前。  |
1093
1094**示例:**
1095
1096```js
1097let kvStore;
1098try {
1099    let resultSet;
1100    kvStore.getResultSet('batch_test_string_key').then((result) => {
1101        console.log('getResultSet succeed.');
1102        resultSet = result;
1103    }).catch((err) => {
1104        console.log('getResultSet failed: ' + err);
1105    });
1106    const isbeforefirst = resultSet.isBeforeFirst();
1107    console.log("Check isBeforeFirst succeed: " + isbeforefirst);
1108} catch (e) {
1109    console.log("Check isBeforeFirst failed: " + e);
1110}
1111```
1112
1113
1114### isAfterLast<sup>8+</sup>
1115
1116isAfterLast(): boolean
1117
1118检查读取位置是否在最后一行之后。
1119
1120**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1121
1122**返回值:**
1123
1124| 类型    | 说明               |
1125| ------  | --------------    |
1126| boolean |返回true表示读取位置在最后一行之后;返回false表示读取位置不在最后一行之后。  |
1127
1128**示例:**
1129
1130```js
1131let kvStore;
1132try {
1133    let resultSet;
1134    kvStore.getResultSet('batch_test_string_key').then((result) => {
1135        console.log('getResultSet succeed.');
1136        resultSet = result;
1137    }).catch((err) => {
1138        console.log('getResultSet failed: ' + err);
1139    });
1140    const isafterlast = resultSet.isAfterLast();
1141    console.log("Check isAfterLast succeed:" + isafterlast);
1142} catch (e) {
1143    console.log("Check isAfterLast failed: " + e);
1144}
1145```
1146
1147
1148### getEntry<sup>8+</sup>
1149
1150getEntry(): Entry
1151
1152从当前位置获取对应的键值对。
1153
1154**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1155
1156**返回值:**
1157
1158| 类型    | 说明       |
1159| ------  | -------   |
1160| [Entry](#entry) |返回键值对。|
1161
1162**示例:**
1163
1164```js
1165let kvStore;
1166try {
1167    let resultSet;
1168    kvStore.getResultSet('batch_test_string_key').then((result) => {
1169        console.log('getResultSet succeed.');
1170        resultSet = result;
1171    }).catch((err) => {
1172        console.log('getResultSet failed: ' + err);
1173    });
1174    const entry  = resultSet.getEntry();
1175    console.log("getEntry succeed:" + JSON.stringify(entry));
1176} catch (e) {
1177    console.log("getEntry failed: " + e);
1178}
1179```
1180
1181
1182## Query<sup>8+</sup>
1183
1184使用谓词表示数据库查询,提供创建Query实例、查询数据库中的数据和添加谓词的方法。
1185
1186**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1187
1188### constructor<sup>8+</sup>
1189
1190constructor()
1191
1192用于创建Schema实例的构造函数。
1193
1194**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1195
1196
1197### reset<sup>8+</sup>
1198
1199reset(): Query
1200
1201重置Query对象。
1202
1203**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1204
1205
1206**返回值:**
1207
1208| 类型    | 说明       |
1209| ------  | -------   |
1210| [Query](#query8) |返回重置的Query对象。|
1211
1212**示例:**
1213
1214```js
1215try {
1216    let query = new distributedData.Query();
1217    query.equalTo("key", "value");
1218    console.log("query is " + query.getSqlLike());
1219    query.reset();
1220    console.log("query is " + query.getSqlLike());
1221    query = null;
1222} catch (e) {
1223    console.log("simply calls should be ok :" + e);
1224}
1225```
1226
1227
1228### equalTo<sup>8+</sup>
1229
1230equalTo(field: string, value: number|string|boolean): Query
1231
1232构造一个Query对象来查询具有指定字段的条目,其值等于指定的值。
1233
1234**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1235
1236**参数:**
1237
1238| 参数名  | 类型 | 必填  | 说明                    |
1239| -----  | ------  | ----  | ----------------------- |
1240| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1241| value  | number\|string\|boolean  | 是    | 表示指定的值。|
1242
1243**返回值:**
1244
1245| 类型    | 说明       |
1246| ------  | -------   |
1247| [Query](#query8) |返回Query对象。|
1248
1249**示例:**
1250
1251```js
1252try {
1253    let query = new distributedData.Query();
1254    query.equalTo("field", "value");
1255    console.log("query is " + query.getSqlLike());
1256    query = null;
1257} catch (e) {
1258    console.log("duplicated calls should be ok :" + e);
1259}
1260```
1261
1262
1263### notEqualTo<sup>8+</sup>
1264
1265notEqualTo(field: string, value: number|string|boolean): Query
1266
1267构造一个Query对象以查询具有指定字段且值不等于指定值的条目。
1268
1269**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1270
1271**参数:**
1272
1273| 参数名  | 类型 | 必填  | 说明                    |
1274| -----  | ------  | ----  | ----------------------- |
1275| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1276| value  | number\|string\|boolean  | 是    | 表示指定的值。|
1277
1278**返回值:**
1279
1280| 类型    | 说明       |
1281| ------  | -------   |
1282| [Query](#query8) |返回Query对象。|
1283
1284**示例:**
1285
1286```js
1287try {
1288    let query = new distributedData.Query();
1289    query.notEqualTo("field", "value");
1290    console.log("query is " + query.getSqlLike());
1291    query = null;
1292} catch (e) {
1293    console.log("duplicated calls should be ok :" + e);
1294}
1295```
1296
1297
1298### greaterThan<sup>8+</sup>
1299
1300greaterThan(field: string, value: number|string|boolean): Query
1301
1302构造一个Query对象以查询具有大于指定值的指定字段的条目。
1303
1304**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1305
1306**参数:**
1307
1308| 参数名  | 类型 | 必填  | 说明                    |
1309| -----  | ------  | ----  | ----------------------- |
1310| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1311| value  | number\|string\|boolean  | 是    | 表示指定的值。|
1312
1313**返回值:**
1314
1315| 类型    | 说明       |
1316| ------  | -------   |
1317| [Query](#query8) |返回Query对象。|
1318
1319**示例:**
1320
1321```js
1322try {
1323    let query = new distributedData.Query();
1324    query.greaterThan("field", "value");
1325    console.log("query is " + query.getSqlLike());
1326    query = null;
1327} catch (e) {
1328    console.log("duplicated calls should be ok :" + e);
1329}
1330```
1331
1332
1333### lessThan<sup>8+</sup>
1334
1335lessThan(field: string, value: number|string): Query
1336
1337构造一个Query对象以查询具有小于指定值的指定字段的条目。
1338
1339**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1340
1341**参数:**
1342
1343| 参数名  | 类型 | 必填  | 说明                    |
1344| -----  | ------  | ----  | ----------------------- |
1345| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1346| value  | number\|string  | 是    | 表示指定的值。|
1347
1348**返回值:**
1349
1350| 类型    | 说明       |
1351| ------  | -------   |
1352| [Query](#query8) |返回Query对象。|
1353
1354**示例:**
1355
1356```js
1357try {
1358    let query = new distributedData.Query();
1359    query.lessThan("field", "value");
1360    console.log("query is " + query.getSqlLike());
1361    query = null;
1362} catch (e) {
1363    console.log("duplicated calls should be ok :" + e);
1364}
1365```
1366
1367
1368### greaterThanOrEqualTo<sup>8+</sup>
1369
1370greaterThanOrEqualTo(field: string, value: number|string): Query
1371
1372构造一个Query对象以查询具有指定字段且值大于或等于指定值的条目。
1373
1374**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1375
1376**参数:**
1377
1378| 参数名  | 类型 | 必填  | 说明                    |
1379| -----  | ------  | ----  | ----------------------- |
1380| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1381| value  | number\|string  | 是    | 表示指定的值。|
1382
1383**返回值:**
1384
1385| 类型    | 说明       |
1386| ------  | -------   |
1387| [Query](#query8) |返回Query对象。|
1388
1389**示例:**
1390
1391```js
1392try {
1393    let query = new distributedData.Query();
1394    query.greaterThanOrEqualTo("field", "value");
1395    console.log("query is " + query.getSqlLike());
1396    query = null;
1397} catch (e) {
1398    console.log("duplicated calls should be ok :" + e);
1399}
1400```
1401
1402
1403### lessThanOrEqualTo<sup>8+</sup>
1404
1405lessThanOrEqualTo(field: string, value: number|string): Query
1406
1407构造一个Query对象以查询具有指定字段且值小于或等于指定值的条目。
1408
1409**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1410
1411**参数:**
1412
1413| 参数名  | 类型 | 必填  | 说明                    |
1414| -----  | ------  | ----  | ----------------------- |
1415| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1416| value  | number\|string  | 是    | 表示指定的值。|
1417
1418**返回值:**
1419
1420| 类型    | 说明       |
1421| ------  | -------   |
1422| [Query](#query8) |返回Query对象。|
1423
1424**示例:**
1425
1426```js
1427try {
1428    let query = new distributedData.Query();
1429    query.lessThanOrEqualTo("field", "value");
1430    console.log("query is " + query.getSqlLike());
1431    query = null;
1432} catch (e) {
1433    console.log("duplicated calls should be ok :" + e);
1434}
1435```
1436
1437
1438### isNull<sup>8+</sup>
1439
1440isNull(field: string): Query
1441
1442构造一个Query对象以查询具有值为null的指定字段的条目。
1443
1444**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1445
1446**参数:**
1447
1448| 参数名  | 类型 | 必填  | 说明                    |
1449| -----  | ------  | ----  | ----------------------- |
1450| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1451
1452**返回值:**
1453
1454| 类型    | 说明       |
1455| ------  | -------   |
1456| [Query](#query8) |返回Query对象。|
1457
1458**示例:**
1459
1460```js
1461try {
1462    let query = new distributedData.Query();
1463    query.isNull("field");
1464    console.log("query is " + query.getSqlLike());
1465    query = null;
1466} catch (e) {
1467    console.log("duplicated calls should be ok :" + e);
1468}
1469```
1470
1471
1472### inNumber<sup>8+</sup>
1473
1474inNumber(field: string, valueList: number[]): Query
1475
1476构造一个Query对象以查询具有指定字段的条目,其值在指定的值列表中。
1477
1478
1479**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1480
1481**参数:**
1482
1483| 参数名  | 类型 | 必填  | 说明                    |
1484| -----  | ------  | ----  | ----------------------- |
1485| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1486| valueList  | number[]  | 是    | 表示指定的值列表。|
1487
1488**返回值:**
1489
1490| 类型    | 说明       |
1491| ------  | -------   |
1492| [Query](#query8) |返回Query对象。|
1493
1494**示例:**
1495
1496```js
1497try {
1498    let query = new distributedData.Query();
1499    query.inNumber("field", [0, 1]);
1500    console.log("query is " + query.getSqlLike());
1501    query = null;
1502} catch (e) {
1503    console.log("duplicated calls should be ok :" + e);
1504}
1505```
1506
1507
1508### inString<sup>8+</sup>
1509
1510inString(field: string, valueList: string[]): Query
1511
1512构造一个Query对象以查询具有指定字段的条目,其值在指定的字符串值列表中。
1513
1514**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1515
1516**参数:**
1517
1518| 参数名  | 类型 | 必填  | 说明                    |
1519| -----  | ------  | ----  | ----------------------- |
1520| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1521| valueList  | string[]  | 是    | 表示指定的字符串值列表。|
1522
1523**返回值:**
1524
1525| 类型    | 说明       |
1526| ------  | -------   |
1527| [Query](#query8) |返回Query对象。|
1528
1529**示例:**
1530
1531```js
1532try {
1533    let query = new distributedData.Query();
1534    query.inString("field", ['test1', 'test2']);
1535    console.log("query is " + query.getSqlLike());
1536    query = null;
1537} catch (e) {
1538    console.log("duplicated calls should be ok :" + e);
1539}
1540```
1541
1542
1543### notInNumber<sup>8+</sup>
1544
1545notInNumber(field: string, valueList: number[]): Query
1546
1547构造一个Query对象以查询具有指定字段的条目,该字段的值不在指定的值列表中。
1548
1549**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1550
1551**参数:**
1552
1553| 参数名  | 类型 | 必填  | 说明                    |
1554| -----  | ------  | ----  | ----------------------- |
1555| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1556| valueList  | number[]  | 是    | 表示指定的值列表。|
1557
1558**返回值:**
1559
1560| 类型    | 说明       |
1561| ------  | -------   |
1562| [Query](#query8) |返回Query对象。|
1563
1564**示例:**
1565
1566```js
1567try {
1568    let query = new distributedData.Query();
1569    query.notInNumber("field", [0, 1]);
1570    console.log("query is " + query.getSqlLike());
1571    query = null;
1572} catch (e) {
1573    console.log("duplicated calls should be ok :" + e);
1574}
1575```
1576
1577
1578### notInString<sup>8+</sup>
1579
1580notInString(field: string, valueList: string[]): Query
1581
1582构造一个Query对象以查询具有指定字段且值不在指定字符串值列表中的条目。
1583
1584**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1585
1586**参数:**
1587
1588| 参数名  | 类型 | 必填  | 说明                    |
1589| -----  | ------  | ----  | ----------------------- |
1590| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1591| valueList  | string[]  | 是    | 表示指定的字符串值列表。|
1592
1593**返回值:**
1594
1595| 类型    | 说明       |
1596| ------  | -------   |
1597| [Query](#query8) |返回Query对象。|
1598
1599**示例:**
1600
1601```js
1602try {
1603    let query = new distributedData.Query();
1604    query.notInString("field", ['test1', 'test2']);
1605    console.log("query is " + query.getSqlLike());
1606    query = null;
1607} catch (e) {
1608    console.log("duplicated calls should be ok :" + e);
1609}
1610```
1611
1612
1613### like<sup>8+</sup>
1614
1615like(field: string, value: string): Query
1616
1617构造一个Query对象以查询具有与指定字符串值相似的指定字段的条目。
1618
1619**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1620
1621**参数:**
1622
1623| 参数名  | 类型 | 必填  | 说明                    |
1624| -----  | ------  | ----  | ----------------------- |
1625| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1626| value  | string  | 是    | 表示指定的字符串值。|
1627
1628**返回值:**
1629
1630| 类型    | 说明       |
1631| ------  | -------   |
1632| [Query](#query8) |返回Query对象。|
1633
1634**示例:**
1635
1636```js
1637try {
1638    let query = new distributedData.Query();
1639    query.like("field", "value");
1640    console.log("query is " + query.getSqlLike());
1641    query = null;
1642} catch (e) {
1643    console.log("duplicated calls should be ok :" + e);
1644}
1645```
1646
1647
1648### unlike<sup>8+</sup>
1649
1650unlike(field: string, value: string): Query
1651
1652构造一个Query对象以查询具有与指定字符串值不相似的指定字段的条目。
1653
1654**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1655
1656**参数:**
1657
1658| 参数名  | 类型 | 必填  | 说明                    |
1659| -----  | ------  | ----  | ----------------------- |
1660| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1661| value  | string  | 是    | 表示指定的字符串值。|
1662
1663**返回值:**
1664
1665| 类型    | 说明       |
1666| ------  | -------   |
1667| [Query](#query8) |返回Query对象。|
1668
1669**示例:**
1670
1671```js
1672try {
1673    let query = new distributedData.Query();
1674    query.unlike("field", "value");
1675    console.log("query is " + query.getSqlLike());
1676    query = null;
1677} catch (e) {
1678    console.log("duplicated calls should be ok :" + e);
1679}
1680```
1681
1682
1683### and<sup>8+</sup>
1684
1685and(): Query
1686
1687构造一个带有与条件的查询对象。
1688
1689**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1690
1691**返回值:**
1692
1693| 类型    | 说明       |
1694| ------  | -------   |
1695| [Query](#query8) |返回查询对象。|
1696
1697**示例:**
1698
1699```js
1700try {
1701    let query = new distributedData.Query();
1702    query.notEqualTo("field", "value1");
1703    query.and();
1704    query.notEqualTo("field", "value2");
1705    console.log("query is " + query.getSqlLike());
1706    query = null;
1707} catch (e) {
1708    console.log("duplicated calls should be ok :" + e);
1709}
1710```
1711
1712
1713### or<sup>8+</sup>
1714
1715or(): Query
1716
1717构造一个带有或条件的Query对象。
1718
1719**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1720
1721**返回值:**
1722
1723| 类型    | 说明       |
1724| ------  | -------   |
1725| [Query](#query8) |返回查询对象。|
1726
1727**示例:**
1728
1729```js
1730try {
1731    let query = new distributedData.Query();
1732    query.notEqualTo("field", "value1");
1733    query.or();
1734    query.notEqualTo("field", "value2");
1735    console.log("query is " + query.getSqlLike());
1736    query = null;
1737} catch (e) {
1738    console.log("duplicated calls should be ok :" + e);
1739}
1740```
1741
1742
1743### orderByAsc<sup>8+</sup>
1744
1745orderByAsc(field: string): Query
1746
1747构造一个Query对象,将查询结果按升序排序。
1748
1749**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1750
1751**参数:**
1752
1753| 参数名  | 类型 | 必填  | 说明                    |
1754| -----  | ------  | ----  | ----------------------- |
1755| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1756
1757**返回值:**
1758
1759| 类型    | 说明       |
1760| ------  | -------   |
1761| [Query](#query8) |返回Query对象。|
1762
1763**示例:**
1764
1765```js
1766try {
1767    let query = new distributedData.Query();
1768    query.notEqualTo("field", "value");
1769    query.orderByAsc("field");
1770    console.log("query is " + query.getSqlLike());
1771    query = null;
1772} catch (e) {
1773    console.log("duplicated calls should be ok :" + e);
1774}
1775```
1776
1777
1778### orderByDesc<sup>8+</sup>
1779
1780orderByDesc(field: string): Query
1781
1782构造一个Query对象,将查询结果按降序排序。
1783
1784**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1785
1786**参数:**
1787
1788| 参数名  | 类型 | 必填  | 说明                    |
1789| -----  | ------  | ----  | ----------------------- |
1790| field  | string  | 是    |表示指定字段,不能包含' ^ '。  |
1791
1792**返回值:**
1793
1794| 类型    | 说明       |
1795| ------  | -------   |
1796| [Query](#query8) |返回Query对象。|
1797
1798**示例:**
1799
1800```js
1801try {
1802    let query = new distributedData.Query();
1803    query.notEqualTo("field", "value");
1804    query.orderByDesc("field");
1805    console.log("query is " + query.getSqlLike());
1806    query = null;
1807} catch (e) {
1808    console.log("duplicated calls should be ok :" + e);
1809}
1810```
1811
1812
1813### limit<sup>8+</sup>
1814
1815limit(total: number, offset: number): Query
1816
1817构造一个Query对象来指定结果的数量和开始位置。
1818
1819**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1820
1821**参数:**
1822
1823| 参数名  | 类型 | 必填  | 说明                    |
1824| -----  | ------  | ----  | ----------------------- |
1825| total  | number  | 是    |表示指定的结果数。  |
1826| offset | number  | 是    |表示起始位置。  |
1827
1828**返回值:**
1829
1830| 类型    | 说明       |
1831| ------  | -------   |
1832| [Query](#query8) |返回Query对象。|
1833
1834**示例:**
1835
1836```js
1837let total = 10;
1838let offset = 1;
1839try {
1840    let query = new distributedData.Query();
1841    query.notEqualTo("field", "value");
1842    query.limit(total, offset);
1843    console.log("query is " + query.getSqlLike());
1844    query = null;
1845} catch (e) {
1846    console.log("duplicated calls should be ok :" + e);
1847}
1848```
1849
1850
1851### isNotNull<sup>8+</sup>
1852
1853isNotNull(field: string): Query
1854
1855构造一个Query对象以查询具有值不为null的指定字段的条目。
1856
1857**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1858
1859**参数:**
1860
1861| 参数名  | 类型 | 必填  | 说明                    |
1862| -----  | ------  | ----  | ----------------------- |
1863| field  | string  | 是    |表示指定字段,不能包含' ^ '。      |
1864
1865**返回值:**
1866
1867| 类型    | 说明       |
1868| ------  | -------   |
1869| [Query](#query8) |返回Query对象。|
1870
1871**示例:**
1872
1873```js
1874try {
1875    let query = new distributedData.Query();
1876    query.isNotNull("field");
1877    console.log("query is " + query.getSqlLike());
1878    query = null;
1879} catch (e) {
1880    console.log("duplicated calls should be ok :" + e);
1881}
1882```
1883
1884
1885### beginGroup<sup>8+</sup>
1886
1887beginGroup(): Query
1888
1889创建一个带有左括号的查询条件组。
1890
1891**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1892
1893**返回值:**
1894
1895| 类型    | 说明       |
1896| ------  | -------   |
1897| [Query](#query8) |返回Query对象。|
1898
1899**示例:**
1900
1901```js
1902try {
1903    let query = new distributedData.Query();
1904    query.beginGroup();
1905    query.isNotNull("field");
1906    query.endGroup();
1907    console.log("query is " + query.getSqlLike());
1908    query = null;
1909} catch (e) {
1910    console.log("duplicated calls should be ok :" + e);
1911}
1912```
1913
1914
1915### endGroup<sup>8+</sup>
1916
1917endGroup(): Query
1918
1919创建一个带有右括号的查询条件组。
1920
1921**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1922
1923**返回值:**
1924
1925| 类型    | 说明       |
1926| ------  | -------   |
1927| [Query](#query8) |返回Query对象。|
1928
1929**示例:**
1930
1931```js
1932try {
1933    let query = new distributedData.Query();
1934    query.beginGroup();
1935    query.isNotNull("field");
1936    query.endGroup();
1937    console.log("query is " + query.getSqlLike());
1938    query = null;
1939} catch (e) {
1940    console.log("duplicated calls should be ok :" + e);
1941}
1942```
1943
1944
1945### prefixKey<sup>8+</sup>
1946
1947prefixKey(prefix: string): Query
1948
1949创建具有指定键前缀的查询条件。
1950
1951**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1952
1953**参数:**
1954
1955| 参数名  | 类型 | 必填  | 说明                    |
1956| -----  | ------  | ----  | ----------------------- |
1957| prefix | string  | 是    |表示指定的键前缀。     |
1958
1959**返回值:**
1960
1961| 类型    | 说明       |
1962| ------  | -------   |
1963| [Query](#query8) |返回Query对象。|
1964
1965**示例:**
1966
1967```js
1968try {
1969    let query = new distributedData.Query();
1970    query.prefixKey("$.name");
1971    query.prefixKey("0");
1972    console.log("query is " + query.getSqlLike());
1973    query = null;
1974} catch (e) {
1975    console.log("duplicated calls should be ok :" + e);
1976}
1977```
1978
1979
1980### setSuggestIndex<sup>8+</sup>
1981
1982setSuggestIndex(index: string): Query
1983
1984设置一个指定的索引,将优先用于查询。
1985
1986**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
1987
1988**参数:**
1989
1990| 参数名  | 类型 | 必填  | 说明                    |
1991| -----  | ------  | ----  | ----------------------- |
1992| index  | string  | 是    |指示要设置的索引。   |
1993
1994**返回值:**
1995
1996| 类型    | 说明       |
1997| ------  | -------   |
1998| [Query](#query8) |返回Query对象。|
1999
2000**示例:**
2001
2002```js
2003try {
2004    let query = new distributedData.Query();
2005    query.setSuggestIndex("$.name");
2006    query.setSuggestIndex("0");
2007    console.log("query is " + query.getSqlLike());
2008    query = null;
2009} catch (e) {
2010   console.log("duplicated calls should be ok :" + e);
2011}
2012```
2013
2014
2015### deviceId<sup>8+</sup>
2016
2017deviceId(deviceId:string):Query
2018
2019添加设备ID作为key的前缀。
2020> **说明:**
2021>
2022> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
2023> deviceId具体获取方式请参考[sync接口示例](#sync)。
2024
2025**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2026
2027**参数:**
2028
2029| 参数名  | 类型 | 必填  | 说明                    |
2030| -----  | ------  | ----  | ----------------------- |
2031| deviceId | string  | 是    |指示查询的设备ID。   |
2032
2033
2034**返回值:**
2035
2036| 类型    | 说明       |
2037| ------  | -------   |
2038| [Query](#query8) |返回Query对象。|
2039
2040**示例:**
2041
2042```js
2043try {
2044    let query = new distributedData.Query();
2045    query.deviceId("deviceId");
2046    console.log("query is " + query.getSqlLike());
2047} catch (e) {
2048    console.log("should be ok on Method Chaining : " + e);
2049}
2050```
2051
2052
2053### getSqlLike<sup>8+</sup>
2054
2055getSqlLike():string
2056
2057获取Query对象的查询语句。
2058
2059**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2060
2061**返回值:**
2062
2063| 类型    | 说明       |
2064| ------  | -------   |
2065| string |返回一个字段列中包含对应子串的结果。|
2066
2067**示例:**
2068
2069```js
2070try {
2071    let query = new distributedData.Query();
2072    let sql1 = query.getSqlLike();
2073    console.log("GetSqlLike sql=" + sql1);
2074} catch (e) {
2075    console.log("duplicated calls should be ok : " + e);
2076}
2077```
2078
2079
2080## KVStore
2081
2082KVStore数据库实例,提供增加数据、删除数据和订阅数据变更、订阅数据同步完成的方法。
2083
2084在调用KVStore的方法前,需要先通过[getKVStore](#getkvstore)构建一个KVStore实例。
2085
2086### put
2087
2088put(key: string, value: Uint8Array | string | number | boolean, callback: AsyncCallback&lt;void&gt;): void
2089
2090添加指定类型键值对到数据库,使用callback异步回调。
2091
2092**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2093
2094**参数:**
2095
2096| 参数名  | 类型 | 必填  | 说明                    |
2097| -----  | ------  | ----  | ----------------------- |
2098| key    | string  | 是    |要添加数据的key,不能为空且长度不大于[MAX_KEY_LENGTH](#constants)。   |
2099| value  | Uint8Array \| string \| number \| boolean | 是    |要添加数据的value,支持Uint8Array、number 、 string 、boolean,Uint8Array、string 的长度不大于[MAX_VALUE_LENGTH](#constants)。   |
2100| callback | AsyncCallback&lt;void&gt; | 是    |回调函数。   |
2101
2102**示例:**
2103
2104```js
2105let kvStore;
2106const KEY_TEST_STRING_ELEMENT = 'key_test_string';
2107const VALUE_TEST_STRING_ELEMENT = 'value-test-string';
2108try {
2109    kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) {
2110        if (err != undefined) {
2111            console.log("put err: " + JSON.stringify(err));
2112            return;
2113        }
2114        console.log("put success");
2115    });
2116}catch (e) {
2117    console.log("An unexpected error occurred. Error:" + e);
2118}
2119```
2120
2121### put
2122
2123put(key: string, value: Uint8Array | string | number | boolean): Promise&lt;void&gt;
2124
2125添加指定类型键值对到数据库,使用Promise异步回调。
2126
2127**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2128
2129**参数:**
2130
2131| 参数名  | 类型 | 必填  | 说明                    |
2132| -----  | ------  | ----  | ----------------------- |
2133| key    | string  | 是    |要添加数据的key,不能为空且长度不大于[MAX_KEY_LENGTH](#constants)。   |
2134| value  | Uint8Array \| string \| number \| boolean | 是    |要添加数据的value,支持Uint8Array、number 、 string 、boolean,Uint8Array、string 的长度不大于[MAX_VALUE_LENGTH](#constants)。   |
2135
2136**返回值:**
2137
2138| 类型    | 说明       |
2139| ------  | -------   |
2140| Promise&lt;void&gt; |无返回结果的Promise对象。|
2141
2142**示例:**
2143
2144```js
2145let kvStore;
2146const KEY_TEST_STRING_ELEMENT = 'key_test_string';
2147const VALUE_TEST_STRING_ELEMENT = 'value-test-string';
2148try {
2149    kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((data) => {
2150        console.log("put success: " + JSON.stringify(data));
2151    }).catch((err) => {
2152        console.log("put err: " + JSON.stringify(err));
2153    });
2154}catch (e) {
2155    console.log("An unexpected error occurred. Error:" + e);
2156}
2157```
2158
2159### delete
2160
2161delete(key: string, callback: AsyncCallback&lt;void&gt;): void
2162
2163从数据库中删除指定键值的数据,使用callback异步回调。
2164
2165**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2166
2167**参数:**
2168
2169| 参数名  | 类型 | 必填  | 说明                    |
2170| -----  | ------  | ----  | ----------------------- |
2171| key    | string  | 是    |要删除数据的key,不能为空且长度不大于[MAX_KEY_LENGTH](#constants)。   |
2172| callback  | AsyncCallback&lt;void&gt;  | 是    |回调函数。   |
2173
2174**示例:**
2175
2176```js
2177let kvStore;
2178const KEY_TEST_STRING_ELEMENT = 'key_test_string';
2179const VALUE_TEST_STRING_ELEMENT = 'value-test-string';
2180try {
2181    kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) {
2182        if (err != undefined) {
2183            console.log("put err: " + JSON.stringify(err));
2184            return;
2185        }
2186        console.log("put success");
2187        kvStore.delete(KEY_TEST_STRING_ELEMENT, function (err,data) {
2188            if (err != undefined) {
2189                console.log("delete err: " + JSON.stringify(err));
2190                return;
2191            }
2192            console.log("delete success");
2193        });
2194    });
2195}catch (e) {
2196    console.log("An unexpected error occurred. Error:" + e);
2197}
2198```
2199
2200### delete
2201
2202delete(key: string): Promise&lt;void&gt;
2203
2204从数据库中删除指定键值的数据,使用Promise异步回调。
2205
2206**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2207
2208**参数:**
2209
2210| 参数名  | 类型 | 必填  | 说明                    |
2211| -----  | ------  | ----  | ----------------------- |
2212| key    | string  | 是    |要删除数据的key,不能为空且长度不大于[MAX_KEY_LENGTH](#constants)。   |
2213
2214**返回值:**
2215
2216| 类型    | 说明       |
2217| ------  | -------   |
2218| Promise&lt;void&gt; |无返回结果的Promise对象。|
2219
2220**示例:**
2221
2222```js
2223let kvStore;
2224const KEY_TEST_STRING_ELEMENT = 'key_test_string';
2225const VALUE_TEST_STRING_ELEMENT = 'value-test-string';
2226try {
2227    kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((data) => {
2228        console.log("put success: " + JSON.stringify(data));
2229        kvStore.delete(KEY_TEST_STRING_ELEMENT).then((data) => {
2230            console.log("delete success");
2231        }).catch((err) => {
2232            console.log("delete err: " + JSON.stringify(err));
2233        });
2234    }).catch((err) => {
2235        console.log("put err: " + JSON.stringify(err));
2236    });
2237}catch (e) {
2238    console.log("An unexpected error occurred. Error:" + e);
2239}
2240```
2241
2242### on('dataChange')
2243
2244on(event: 'dataChange', type: SubscribeType, listener: Callback&lt;ChangeNotification&gt;): void
2245
2246订阅指定类型的数据变更通知。
2247
2248**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
2249
2250**参数:**
2251
2252| 参数名   | 类型                                                      | 必填 | 说明                                                 |
2253| -------- | --------------------------------------------------------- | ---- | ---------------------------------------------------- |
2254| event    | string                                                    | 是   | 订阅的事件名,固定为'dataChange',表示数据变更事件。 |
2255| type     | [SubscribeType](#subscribetype)                           | 是   | 表示订阅的类型。                                     |
2256| listener | Callback&lt;[ChangeNotification](#changenotification)&gt; | 是   | 回调函数。                                           |
2257
2258**示例:**
2259
2260```js
2261let kvStore;
2262kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_LOCAL, function (data) {
2263    console.log("dataChange callback call data: " + JSON.stringify(data));
2264});
2265```
2266
2267### on('syncComplete')
2268
2269on(event: 'syncComplete', syncCallback: Callback&lt;Array&lt;[string, number]&gt;&gt;): void
2270
2271订阅同步完成事件回调通知。
2272
2273**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
2274
2275**参数:**
2276
2277| 参数名       | 类型                                          | 必填 | 说明                                                   |
2278| ------------ | --------------------------------------------- | ---- | ------------------------------------------------------ |
2279| event        | string                                        | 是   | 订阅的事件名,固定为'syncComplete',表示同步完成事件。 |
2280| syncCallback | Callback&lt;Array&lt;[string, number]&gt;&gt; | 是   | 回调函数。用于向调用方发送同步结果的回调。             |
2281
2282**示例:**
2283
2284```js
2285let kvStore;
2286kvStore.on('syncComplete', function (data) {
2287    console.log("callback call data: " + data);
2288});
2289```
2290
2291### off('dataChange')<sup>8+</sup>
2292
2293off(event:'dataChange', listener?: Callback&lt;ChangeNotification&gt;): void
2294
2295取消订阅数据变更通知。
2296
2297**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
2298
2299**参数:**
2300
2301| 参数名   | 类型                                                      | 必填 | 说明                                                     |
2302| -------- | --------------------------------------------------------- | ---- | -------------------------------------------------------- |
2303| event    | string                                                    | 是   | 取消订阅的事件名,固定为'dataChange',表示数据变更事件。 |
2304| listener | Callback&lt;[ChangeNotification](#changenotification)&gt; | 否   | 取消订阅的函数。如不设置callback,则取消所有订阅的函数。 |
2305
2306
2307
2308**示例:**
2309
2310```js
2311let kvStore;
2312class KvstoreModel {
2313    call(data) {
2314        console.log("dataChange: " + data);
2315    }
2316    subscribeDataChange() {
2317        if (kvStore != null) {
2318            kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_REMOTE, this.call);
2319        }
2320    }
2321    unsubscribeDataChange() {
2322        if (kvStore != null) {
2323            kvStore.off('dataChange', this.call);
2324        }
2325    }
2326}
2327```
2328
2329### off('syncComplete')<sup>8+</sup>
2330
2331off(event: 'syncComplete', syncCallback?: Callback&lt;Array&lt;[string, number]&gt;&gt;): void
2332
2333取消订阅同步完成事件回调通知。
2334
2335**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
2336
2337**参数:**
2338
2339| 参数名       | 类型                                          | 必填 | 说明                                                       |
2340| ------------ | --------------------------------------------- | ---- | ---------------------------------------------------------- |
2341| event        | string                                        | 是   | 取消订阅的事件名,固定为'syncComplete',表示同步完成事件。 |
2342| syncCallback | Callback&lt;Array&lt;[string, number]&gt;&gt; | 否   | 取消订阅的函数。如不设置callback,则取消所有订阅的函数。 |
2343
2344**示例:**
2345
2346```js
2347let kvStore;
2348class KvstoreModel {
2349    call(data) {
2350        console.log("syncComplete: " + data);
2351    }
2352    subscribeSyncComplete() {
2353        if (kvStore != null) {
2354            kvStore.on('syncComplete', this.call);
2355        }
2356    }
2357    unsubscribeSyncComplete() {
2358        if (kvStore != null) {
2359            kvStore.off('syncComplete', this.call);
2360        }
2361    }
2362}
2363```
2364
2365### putBatch<sup>8+</sup>
2366
2367putBatch(entries: Entry[], callback: AsyncCallback&lt;void&gt;): void
2368
2369批量插入键值对到KVStore数据库中,使用callback异步回调。
2370
2371**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2372
2373**参数:**
2374
2375| 参数名  | 类型 | 必填  | 说明                    |
2376| -----  | ------  | ----  | ----------------------- |
2377| entries  |[Entry](#entry)[] | 是    |表示要批量插入的键值对。  |
2378| callback |AsyncCallback&lt;void&gt; |是     |回调函数。 |
2379
2380**示例:**
2381
2382```js
2383let kvStore;
2384try {
2385    let entries = [];
2386    for (var i = 0; i < 10; i++) {
2387        var key = 'batch_test_string_key';
2388        var entry = {
2389            key : key + i,
2390            value : {
2391                type : distributedData.ValueType.STRING,
2392                value : 'batch_test_string_value'
2393            }
2394        }
2395        entries.push(entry);
2396    }
2397    console.log('entries: ' + JSON.stringify(entries));
2398    kvStore.putBatch(entries, async function (err,data) {
2399        console.log('putBatch success');
2400        kvStore.getEntries('batch_test_string_key', function (err,entries) {
2401            console.log('getEntries success');
2402            console.log('entries.length: ' + entries.length);
2403            console.log('entries[0]: ' + JSON.stringify(entries[0]));
2404        });
2405    });
2406}catch(e) {
2407    console.log('PutBatch e ' + JSON.stringify(e));
2408}
2409```
2410
2411
2412### putBatch<sup>8+</sup>
2413
2414putBatch(entries: Entry[]): Promise&lt;void&gt;
2415
2416批量插入键值对到KVStore数据库中,使用Promise异步回调。
2417
2418**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2419
2420**参数:**
2421
2422| 参数名  | 类型 | 必填  | 说明                    |
2423| -----  | ------  | ----  | ----------------------- |
2424| entries  |[Entry](#entry)[] | 是    |表示要批量插入的键值对。  |
2425
2426**返回值:**
2427
2428| 类型    | 说明       |
2429| ------  | -------   |
2430| Promise&lt;void&gt; |无返回结果的Promise对象。|
2431
2432**示例:**
2433
2434```js
2435let kvStore;
2436try {
2437    let entries = [];
2438    for (var i = 0; i < 10; i++) {
2439        var key = 'batch_test_string_key';
2440        var entry = {
2441            key : key + i,
2442            value : {
2443                type : distributedData.ValueType.STRING,
2444                value : 'batch_test_string_value'
2445            }
2446        }
2447        entries.push(entry);
2448    }
2449    console.log('entries: ' + JSON.stringify(entries));
2450    kvStore.putBatch(entries).then(async (err) => {
2451        console.log('putBatch success');
2452        kvStore.getEntries('batch_test_string_key').then((entries) => {
2453            console.log('getEntries success');
2454            console.log('PutBatch ' + JSON.stringify(entries));
2455        }).catch((err) => {
2456            console.log('getEntries fail ' + JSON.stringify(err));
2457        });
2458    }).catch((err) => {
2459        console.log('putBatch fail ' + JSON.stringify(err));
2460    });
2461}catch(e) {
2462    console.log('PutBatch e ' + JSON.stringify(e));
2463}
2464```
2465
2466### deleteBatch<sup>8+</sup>
2467
2468deleteBatch(keys: string[], callback: AsyncCallback&lt;void&gt;): void
2469
2470批量删除KVStore数据库中的键值对,使用callback异步回调。
2471
2472**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2473
2474**参数:**
2475
2476| 参数名  | 类型 | 必填  | 说明                    |
2477| -----  | ------  | ----  | ----------------------- |
2478| keys  |string[] | 是    |表示要批量删除的键值对。  |
2479| callback  |AsyncCallback&lt;void&gt; | 是    |回调函数。  |
2480
2481**示例:**
2482
2483```js
2484let kvStore;
2485try {
2486    let entries = [];
2487    let keys = [];
2488    for (var i = 0; i < 5; i++) {
2489        var key = 'batch_test_string_key';
2490        var entry = {
2491            key : key + i,
2492            value : {
2493                type : distributedData.ValueType.STRING,
2494                value : 'batch_test_string_value'
2495            }
2496        }
2497        entries.push(entry);
2498        keys.push(key + i);
2499    }
2500    console.log('entries: ' + JSON.stringify(entries));
2501    kvStore.putBatch(entries, async function (err,data) {
2502        console.log('putBatch success');
2503        kvStore.deleteBatch(keys, async function (err,data) {
2504            console.log('deleteBatch success');
2505        });
2506    });
2507}catch(e) {
2508    console.log('DeleteBatch e ' + e);
2509}
2510```
2511
2512
2513### deleteBatch<sup>8+</sup>
2514
2515deleteBatch(keys: string[]): Promise&lt;void&gt;
2516
2517批量删除KVStore数据库中的键值对,使用Promise异步回调。
2518
2519**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2520
2521**参数:**
2522
2523| 参数名  | 类型 | 必填  | 说明                    |
2524| -----  | ------  | ----  | ----------------------- |
2525| keys   |string[] | 是    |表示要批量删除的键值对。  |
2526
2527**返回值:**
2528
2529| 类型    | 说明       |
2530| ------  | -------   |
2531| Promise&lt;void&gt; |无返回结果的Promise对象。|
2532
2533**示例:**
2534
2535```js
2536let kvStore;
2537try {
2538    let entries = [];
2539    let keys = [];
2540    for (var i = 0; i < 5; i++) {
2541        var key = 'batch_test_string_key';
2542        var entry = {
2543            key : key + i,
2544            value : {
2545                type : distributedData.ValueType.STRING,
2546                value : 'batch_test_string_value'
2547            }
2548        }
2549        entries.push(entry);
2550        keys.push(key + i);
2551    }
2552    console.log('entries: ' + JSON.stringify(entries));
2553    kvStore.putBatch(entries).then(async (err) => {
2554        console.log('putBatch success');
2555        kvStore.deleteBatch(keys).then((err) => {
2556            console.log('deleteBatch success');
2557        }).catch((err) => {
2558            console.log('deleteBatch fail ' + JSON.stringify(err));
2559        });
2560    }).catch((err) => {
2561        console.log('putBatch fail ' + JSON.stringify(err));
2562    });
2563}catch(e) {
2564    console.log('DeleteBatch e ' + e);
2565}
2566```
2567
2568
2569### startTransaction<sup>8+</sup>
2570
2571startTransaction(callback: AsyncCallback&lt;void&gt;): void
2572
2573启动KVStore数据库中的事务,使用callback异步回调。
2574
2575**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2576
2577**参数:**
2578
2579| 参数名  | 类型 | 必填  | 说明                    |
2580| -----  | ------  | ----  | ----------------------- |
2581| callback  |AsyncCallback&lt;void&gt; | 是    |回调函数。  |
2582
2583**示例:**
2584
2585```js
2586let kvStore;
2587function putBatchString(len, prefix) {
2588    let entries = [];
2589    for (var i = 0; i < len; i++) {
2590        var entry = {
2591            key : prefix + i,
2592            value : {
2593                type : distributedData.ValueType.STRING,
2594                value : 'batch_test_string_value'
2595            }
2596        }
2597        entries.push(entry);
2598    }
2599    return entries;
2600}
2601try {
2602    var count = 0;
2603    kvStore.on('dataChange', 0, function (data) {
2604        console.log('startTransaction 0' + data)
2605        count++;
2606    });
2607    kvStore.startTransaction(async function (err,data) {
2608        console.log('startTransaction success');
2609        let entries = putBatchString(10, 'batch_test_string_key');
2610        console.log('entries: ' + JSON.stringify(entries));
2611        kvStore.putBatch(entries, async function (err,data) {
2612            console.log('putBatch success');
2613        });
2614    });
2615}catch(e) {
2616    console.log('startTransaction e ' + e);
2617}
2618```
2619
2620
2621### startTransaction<sup>8+</sup>
2622
2623startTransaction(): Promise&lt;void&gt;
2624
2625启动KVStore数据库中的事务,使用Promise异步回调。
2626
2627**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2628
2629**返回值:**
2630
2631| 类型    | 说明       |
2632| ------  | -------   |
2633| Promise&lt;void&gt; |无返回结果的Promise对象。|
2634
2635**示例:**
2636
2637```js
2638let kvStore;
2639try {
2640    var count = 0;
2641    kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_ALL, function (data) {
2642        console.log('startTransaction ' + JSON.stringify(data));
2643        count++;
2644    });
2645    kvStore.startTransaction().then(async (err) => {
2646        console.log('startTransaction success');
2647    }).catch((err) => {
2648        console.log('startTransaction fail ' + JSON.stringify(err));
2649    });
2650}catch(e) {
2651    console.log('startTransaction e ' + e);
2652}
2653```
2654
2655
2656### commit<sup>8+</sup>
2657
2658commit(callback: AsyncCallback&lt;void&gt;): void
2659
2660提交KVStore数据库中的事务,使用callback异步回调。
2661
2662**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2663
2664**参数:**
2665
2666| 参数名  | 类型 | 必填  | 说明                    |
2667| -----  | ------  | ----  | ----------------------- |
2668| callback  |AsyncCallback&lt;void&gt; | 是    |回调函数。  |
2669
2670**示例:**
2671
2672```js
2673let kvStore;
2674try {
2675    kvStore.commit(function (err,data) {
2676        if (err == undefined) {
2677            console.log('commit success');
2678        } else {
2679            console.log('commit fail');
2680        }
2681    });
2682}catch(e) {
2683    console.log('Commit e ' + e);
2684}
2685```
2686
2687
2688### commit<sup>8+</sup>
2689
2690commit(): Promise&lt;void&gt;
2691
2692提交KVStore数据库中的事务,使用Promise异步回调。
2693
2694**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2695
2696**返回值:**
2697
2698| 类型    | 说明       |
2699| ------  | -------   |
2700| Promise&lt;void&gt; |无返回结果的Promise对象。|
2701
2702**示例:**
2703
2704```js
2705let kvStore;
2706try {
2707    kvStore.commit().then(async (err) => {
2708        console.log('commit success');
2709    }).catch((err) => {
2710        console.log('commit fail ' + JSON.stringify(err));
2711    });
2712}catch(e) {
2713    console.log('Commit e ' + e);
2714}
2715```
2716
2717
2718### rollback<sup>8+</sup>
2719
2720rollback(callback: AsyncCallback&lt;void&gt;): void
2721
2722在KVStore数据库中回滚事务,使用callback异步回调。
2723
2724**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2725
2726**参数:**
2727
2728| 参数名  | 类型 | 必填  | 说明                    |
2729| -----  | ------  | ----  | ----------------------- |
2730| callback  |AsyncCallback&lt;void&gt; | 是    |回调函数。  |
2731
2732**示例:**
2733
2734```js
2735let kvStore;
2736try {
2737    kvStore.rollback(function (err,data) {
2738        if (err == undefined) {
2739            console.log('commit success');
2740        } else {
2741            console.log('commit fail');
2742        }
2743    });
2744}catch(e) {
2745    console.log('Rollback e ' + e);
2746}
2747```
2748
2749
2750### rollback<sup>8+</sup>
2751
2752rollback(): Promise&lt;void&gt;
2753
2754在KVStore数据库中回滚事务,使用Promise异步回调。
2755
2756**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2757
2758**返回值:**
2759
2760| 类型    | 说明       |
2761| ------  | -------   |
2762| Promise&lt;void&gt; |无返回结果的Promise对象。|
2763
2764**示例:**
2765
2766```js
2767let kvStore;
2768try {
2769    kvStore.rollback().then(async (err) => {
2770        console.log('rollback success');
2771    }).catch((err) => {
2772        console.log('rollback fail ' + JSON.stringify(err));
2773    });
2774}catch(e) {
2775    console.log('Rollback e ' + e);
2776}
2777```
2778
2779
2780### enableSync<sup>8+</sup>
2781
2782enableSync(enabled: boolean, callback: AsyncCallback&lt;void&gt;): void
2783
2784设定是否开启同步,使用callback异步回调。
2785
2786**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2787
2788**参数:**
2789
2790| 参数名  | 类型 | 必填  | 说明                    |
2791| -----  | ------  | ----  | ----------------------- |
2792| enabled  |boolean | 是    |设定是否开启同步,true表示开启同步,false表示不启用同步。  |
2793| callback  |AsyncCallback&lt;void&gt; | 是    |回调函数。  |
2794
2795**示例:**
2796
2797```js
2798let kvStore;
2799try {
2800    kvStore.enableSync(true, function (err,data) {
2801        if (err == undefined) {
2802            console.log('enableSync success');
2803        } else {
2804            console.log('enableSync fail');
2805        }
2806    });
2807}catch(e) {
2808    console.log('EnableSync e ' + e);
2809}
2810```
2811
2812
2813### enableSync<sup>8+</sup>
2814
2815enableSync(enabled: boolean): Promise&lt;void&gt;
2816
2817设定是否开启同步,使用Promise异步回调。
2818
2819**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2820
2821**参数:**
2822
2823| 参数名  | 类型 | 必填  | 说明                    |
2824| -----  | ------  | ----  | ----------------------- |
2825| enabled  |boolean | 是    |设定是否开启同步,true表示开启同步,false表示不启用同步。  |
2826
2827**返回值:**
2828
2829| 类型    | 说明       |
2830| ------  | -------   |
2831| Promise&lt;void&gt; |无返回结果的Promise对象。|
2832
2833**示例:**
2834
2835```js
2836let kvStore;
2837try {
2838    kvStore.enableSync(true).then((err) => {
2839        console.log('enableSync success');
2840    }).catch((err) => {
2841        console.log('enableSync fail ' + JSON.stringify(err));
2842    });
2843}catch(e) {
2844    console.log('EnableSync e ' + e);
2845}
2846```
2847
2848
2849### setSyncRange<sup>8+</sup>
2850
2851setSyncRange(localLabels: string[], remoteSupportLabels: string[], callback: AsyncCallback&lt;void&gt;): void
2852
2853设置同步范围标签,使用callback异步回调。
2854
2855**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2856
2857**参数:**
2858
2859| 参数名  | 类型 | 必填  | 说明                    |
2860| -----  | ------  | ----  | ----------------------- |
2861| localLabels  |string[] | 是    |表示本地设备的同步标签。  |
2862| remoteSupportLabels  |string[] | 是    |表示要同步数据的设备的同步标签。  |
2863| callback  |AsyncCallback&lt;void&gt; | 是    |回调函数。  |
2864
2865**示例:**
2866
2867```js
2868let kvStore;
2869try {
2870    const localLabels = ['A', 'B'];
2871    const remoteSupportLabels = ['C', 'D'];
2872    kvStore.setSyncRange(localLabels, remoteSupportLabels, function (err,data) {
2873        console.log('SetSyncRange put success');
2874    });
2875}catch(e) {
2876    console.log('SetSyncRange e ' + e);
2877}
2878```
2879
2880
2881### setSyncRange<sup>8+</sup>
2882
2883setSyncRange(localLabels: string[], remoteSupportLabels: string[]): Promise&lt;void&gt;
2884
2885设置同步范围标签,使用Promise异步回调。
2886
2887**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2888
2889**参数:**
2890
2891| 参数名  | 类型 | 必填  | 说明                    |
2892| -----  | ------  | ----  | ----------------------- |
2893| localLabels  |string[] | 是    |表示本地设备的同步标签。  |
2894| remoteSupportLabels  |string[] | 是    |表示要同步数据的设备的同步标签。  |
2895
2896
2897**返回值:**
2898
2899| 类型    | 说明       |
2900| ------  | -------   |
2901| Promise&lt;void&gt; |无返回结果的Promise对象。|
2902
2903**示例:**
2904
2905```js
2906let kvStore;
2907try {
2908    const localLabels = ['A', 'B'];
2909    const remoteSupportLabels = ['C', 'D'];
2910    kvStore.setSyncRange(localLabels, remoteSupportLabels).then((err) => {
2911        console.log('setSyncRange success');
2912    }).catch((err) => {
2913        console.log('delete fail ' + err);
2914    });
2915}catch(e) {
2916    console.log('SetSyncRange e ' + e);
2917}
2918```
2919
2920
2921## SubscribeType
2922
2923订阅类型枚举。
2924
2925**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
2926
2927| 名称  | 值   | 说明                    |
2928| -----  | ------   | ----------------------- |
2929| SUBSCRIBE_TYPE_LOCAL  |0 |表示订阅本地数据变更。  |
2930| SUBSCRIBE_TYPE_REMOTE |1 |表示订阅远端数据变更。  |
2931| SUBSCRIBE_TYPE_ALL  |2 |表示订阅远端和本地数据变更。  |
2932
2933## ChangeNotification
2934
2935数据变更时通知的对象,包括数据插入的数据、更新的数据、删除的数据和设备ID。
2936
2937**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
2938
2939| 名称  | 类型   |必填   | 说明                    |
2940| ----- | -------   | ------|------------------------ |
2941| insertEntries | [Entry](#entry)[]   | 是 |数据添加记录。   |
2942| updateEntries | [Entry](#entry)[]   | 是 |数据更新记录。   |
2943| deleteEntries | [Entry](#entry)[]   | 是 |数据删除记录。   |
2944| deviceId | string   | 是 |设备ID,此处为设备UUID。  |
2945
2946## Entry
2947
2948存储在数据库中的键值对。
2949
2950**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
2951
2952| 名称  | 类型   |必填   | 说明                    |
2953| ----- | -------   | ------|------------------------ |
2954| key | string   | 是 |键值。   |
2955| value | [Value](#value) | 是 |值对象。   |
2956
2957
2958## Value
2959
2960存储在数据库中的值对象。
2961
2962**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
2963
2964| 名称  | 类型   |必填   | 说明                    |
2965| ----- | -------   | ------|------------------------ |
2966| type | [ValueType](#value)   | 是 |值类型。   |
2967| value | Uint8Array \| string \| number \| boolean| 是 |值。   |
2968
2969## ValueType
2970
2971数据类型枚举。
2972
2973**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
2974
2975| 名称  | 值   | 说明                    |
2976| -----  | ------   | ----------------------- |
2977| STRING  |0 |表示值类型为字符串。  |
2978| INTEGER |1 |表示值类型为整数。  |
2979| FLOAT   |2 |表示值类型为浮点数。  |
2980| BYTE_ARRAY   |3 |表示值类型为字节数组。  |
2981| BOOLEAN   |4 |表示值类型为布尔值。  |
2982| DOUBLE   |5 |表示值类型为双浮点数。  |
2983
2984## SingleKVStore
2985
2986单版本数据库,继承自[KVStore](#kvstore)数据库,提供查询数据和同步数据的方法。
2987
2988单版本数据库,不对数据所属设备进行区分,不同设备使用相同键写入数据会互相覆盖。比如,可以使用单版本数据库实现个人日历、联系人数据在不同设备间的数据同步。
2989
2990在调用SingleKVStore的方法前,需要先通过[getKVStore](#getkvstore)构建一个SingleKVStore实例。
2991
2992### get
2993
2994get(key: string, callback: AsyncCallback&lt;Uint8Array | string | boolean | number&gt;): void
2995
2996获取指定键的值,使用callback异步回调。
2997
2998**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
2999
3000**参数:**
3001
3002| 参数名  | 类型 | 必填  | 说明                    |
3003| -----  | ------  | ----  | ----------------------- |
3004| key    |string   | 是    |要查询数据的key,不能为空且长度不大于[MAX_KEY_LENGTH](#constants)。  |
3005| callback  |AsyncCallback&lt;Uint8Array \| string \| boolean \| number&gt; | 是    |回调函数。返回获取查询的值。  |
3006
3007**示例:**
3008
3009```js
3010let kvStore;
3011const KEY_TEST_STRING_ELEMENT = 'key_test_string';
3012const VALUE_TEST_STRING_ELEMENT = 'value-test-string';
3013try {
3014    kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, function (err,data) {
3015        if (err != undefined) {
3016            console.log("put err: " + JSON.stringify(err));
3017            return;
3018        }
3019        console.log("put success");
3020        kvStore.get(KEY_TEST_STRING_ELEMENT, function (err,data) {
3021            console.log("get success data: " + data);
3022        });
3023    });
3024}catch (e) {
3025    console.log("An unexpected error occurred. Error:" + e);
3026}
3027```
3028
3029
3030### get
3031
3032get(key: string): Promise&lt;Uint8Array | string | boolean | number&gt;
3033
3034获取指定键的值,使用Promise异步回调。
3035
3036**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3037
3038**参数:**
3039
3040| 参数名  | 类型 | 必填  | 说明                    |
3041| -----  | ------  | ----  | ----------------------- |
3042| key    |string   | 是    |要查询数据的key,不能为空且长度不大于[MAX_KEY_LENGTH](#constants)。  |
3043
3044
3045**返回值:**
3046
3047| 类型    | 说明       |
3048| ------  | -------   |
3049|Promise&lt;Uint8Array \| string \| boolean \| number&gt; |Promise对象。返回获取查询的值。|
3050
3051**示例:**
3052
3053```js
3054let kvStore;
3055const KEY_TEST_STRING_ELEMENT = 'key_test_string';
3056const VALUE_TEST_STRING_ELEMENT = 'value-test-string';
3057try {
3058    kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((data) => {
3059        console.log("put success: " + JSON.stringify(data));
3060        kvStore.get(KEY_TEST_STRING_ELEMENT).then((data) => {
3061            console.log("get success data: " + data);
3062        }).catch((err) => {
3063            console.log("get err: " + JSON.stringify(err));
3064        });
3065    }).catch((err) => {
3066        console.log("put err: " + JSON.stringify(err));
3067    });
3068}catch (e) {
3069    console.log("An unexpected error occurred. Error:" + e);
3070}
3071```
3072
3073### getEntries<sup>8+</sup>
3074
3075getEntries(keyPrefix: string, callback: AsyncCallback&lt;Entry[]&gt;): void
3076
3077获取匹配指定键前缀的所有键值对,使用callback异步回调。
3078
3079**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3080
3081**参数:**
3082
3083| 参数名  | 类型 | 必填  | 说明                    |
3084| -----  | ------  | ----  | ----------------------- |
3085| keyPrefix    |string   | 是    |表示要匹配的键前缀。  |
3086| callback    |AsyncCallback&lt;[Entry](#entry)[]&gt;   | 是    |回调函数。返回匹配指定前缀的键值对列表。  |
3087
3088**示例:**
3089
3090```js
3091let kvStore;
3092try {
3093    let entries = [];
3094    for (var i = 0; i < 10; i++) {
3095        var key = 'batch_test_number_key';
3096        var entry = {
3097            key : key + i,
3098            value : {
3099                type : distributedData.ValueType.INTEGER,
3100                value : 222
3101            }
3102        }
3103        entries.push(entry);
3104    }
3105    kvStore.putBatch(entries, async function (err,data) {
3106        console.log('putBatch success');
3107        kvStore.getEntries('batch_test_number_key', function (err,entries) {
3108            console.log('getEntries success');
3109            console.log('entries.length: ' + entries.length);
3110            console.log('entries[0]: ' + JSON.stringify(entries[0]));
3111        });
3112    });
3113}catch(e) {
3114    console.log('PutBatch e ' + e);
3115}
3116```
3117
3118
3119### getEntries<sup>8+</sup>
3120
3121getEntries(keyPrefix: string): Promise&lt;Entry[]&gt;
3122
3123获取匹配指定键前缀的所有键值对,使用Promise异步回调。
3124
3125**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3126
3127**参数:**
3128
3129| 参数名  | 类型 | 必填  | 说明                    |
3130| -----  | ------  | ----  | ----------------------- |
3131| keyPrefix    |string   | 是    |表示要匹配的键前缀。  |
3132
3133**返回值:**
3134
3135| 类型    | 说明       |
3136| ------  | -------   |
3137|Promise&lt;[Entry](#entry)[]&gt; |Promise对象。返回匹配指定前缀的键值对列表。|
3138
3139**示例:**
3140
3141```js
3142let kvStore;
3143try {
3144    let entries = [];
3145    for (var i = 0; i < 10; i++) {
3146        var key = 'batch_test_string_key';
3147        var entry = {
3148            key : key + i,
3149            value : {
3150                type : distributedData.ValueType.STRING,
3151                value : 'batch_test_string_value'
3152            }
3153        }
3154        entries.push(entry);
3155    }
3156    console.log('entries: ' + entries);
3157    kvStore.putBatch(entries).then(async (err) => {
3158        console.log('putBatch success');
3159        kvStore.getEntries('batch_test_string_key').then((entries) => {
3160            console.log('getEntries success');
3161            console.log('entries.length: ' + entries.length);
3162            console.log('entries[0]: ' + JSON.stringify(entries[0]));
3163            console.log('entries[0].value: ' + JSON.stringify(entries[0].value));
3164            console.log('entries[0].value.value: ' + entries[0].value.value);
3165        }).catch((err) => {
3166            console.log('getEntries fail ' + JSON.stringify(err));
3167        });
3168    }).catch((err) => {
3169        console.log('putBatch fail ' + JSON.stringify(err));
3170    });
3171}catch(e) {
3172    console.log('PutBatch e ' + e);
3173}
3174```
3175
3176
3177### getEntries<sup>8+</sup>
3178
3179getEntries(query: Query, callback: AsyncCallback&lt;Entry[]&gt;): void
3180
3181获取与指定Query对象匹配的键值对列表,使用callback异步回调。
3182
3183**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3184
3185**参数:**
3186
3187| 参数名  | 类型 | 必填  | 说明                    |
3188| -----  | ------  | ----  | ----------------------- |
3189| query  |[Query](#query8)   | 是    |表示要匹配的键前缀。  |
3190| callback  |AsyncCallback&lt;[Entry](#entry)[]&gt;   | 是    |回调函数。返回与指定Query对象匹配的键值对列表。  |
3191
3192**示例:**
3193
3194```js
3195let kvStore;
3196try {
3197    var arr = new Uint8Array([21,31]);
3198    let entries = [];
3199    for (var i = 0; i < 10; i++) {
3200        var key = 'batch_test_bool_key';
3201        var entry = {
3202            key : key + i,
3203            value : {
3204                type : distributedData.ValueType.BYTE_ARRAY,
3205                value : arr
3206            }
3207        }
3208        entries.push(entry);
3209    }
3210    console.log('entries: ' + JSON.stringify(entries));
3211    kvStore.putBatch(entries, async function (err,data) {
3212        console.log('putBatch success');
3213        const query = new distributedData.Query();
3214        query.prefixKey("batch_test");
3215        kvStore.getEntries(query, function (err,entries) {
3216            console.log('getEntries success');
3217            console.log('entries.length: ' + entries.length);
3218            console.log('entries[0]: ' + JSON.stringify(entries[0]));
3219        });
3220    });
3221    console.log('GetEntries success');
3222}catch(e) {
3223    console.log('GetEntries e ' + e);
3224}
3225```
3226
3227
3228### getEntries<sup>8+</sup>
3229
3230getEntries(query: Query): Promise&lt;Entry[]&gt;
3231
3232获取与指定Query对象匹配的键值对列表,使用Promise异步回调。
3233
3234**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3235
3236**参数:**
3237
3238| 参数名  | 类型 | 必填  | 说明                    |
3239| -----  | ------  | ----  | ----------------------- |
3240| query  |[Query](#query8)   | 是    |表示查询对象。  |
3241
3242**返回值:**
3243
3244| 类型    | 说明       |
3245| ------  | -------   |
3246|Promise&lt;[Entry](#entry)[]&gt; |Promise对象。返回与指定Query对象匹配的键值对列表。|
3247
3248**示例:**
3249
3250```js
3251let kvStore;
3252try {
3253    var arr = new Uint8Array([21,31]);
3254    let entries = [];
3255    for (var i = 0; i < 10; i++) {
3256        var key = 'batch_test_bool_key';
3257        var entry = {
3258            key : key + i,
3259            value : {
3260                type : distributedData.ValueType.BYTE_ARRAY,
3261                value : arr
3262            }
3263        }
3264        entries.push(entry);
3265    }
3266    console.log('entries: ' + JSON.stringify(entries));
3267    kvStore.putBatch(entries).then(async (err) => {
3268        console.log('putBatch success');
3269        const query = new distributedData.Query();
3270        query.prefixKey("batch_test");
3271        kvStore.getEntries(query).then((entries) => {
3272            console.log('getEntries success');
3273        }).catch((err) => {
3274            console.log('getEntries fail ' + JSON.stringify(err));
3275        });
3276    }).catch((err) => {
3277        console.log('GetEntries putBatch fail ' + JSON.stringify(err))
3278    });
3279    console.log('GetEntries success');
3280}catch(e) {
3281    console.log('GetEntries e ' + e);
3282}
3283```
3284
3285
3286### getResultSet<sup>8+</sup>
3287
3288getResultSet(keyPrefix: string, callback: AsyncCallback&lt;KvStoreResultSet&gt;): void
3289
3290从KvStore数据库中获取具有指定前缀的结果集,使用callback异步回调。
3291
3292**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3293
3294**参数:**
3295
3296| 参数名  | 类型 | 必填  | 说明                    |
3297| -----  | ------  | ----  | ----------------------- |
3298| keyPrefix  |string   | 是    |表示要匹配的键前缀。 |
3299| callback  |AsyncCallback&lt;[KvStoreResultSet](#kvstoreresultset8)&gt;   | 是    |回调函数。返回具有指定前缀的结果集。 |
3300
3301**示例:**
3302
3303```js
3304let kvStore;
3305try {
3306    let resultSet;
3307    let entries = [];
3308    for (var i = 0; i < 10; i++) {
3309        var key = 'batch_test_string_key';
3310        var entry = {
3311            key : key + i,
3312            value : {
3313                type : distributedData.ValueType.STRING,
3314                value : 'batch_test_string_value'
3315            }
3316        }
3317        entries.push(entry);
3318    }
3319    kvStore.putBatch(entries, async function (err, data) {
3320        console.log('GetResultSet putBatch success');
3321        kvStore.getResultSet('batch_test_string_key', async function (err, result) {
3322            console.log('GetResultSet getResultSet succeed.');
3323            resultSet = result;
3324            kvStore.closeResultSet(resultSet, function (err, data) {
3325                console.log('GetResultSet closeResultSet success');
3326            })
3327        });
3328    });
3329}catch(e) {
3330    console.log('GetResultSet e ' + e);
3331}
3332```
3333
3334
3335### getResultSet<sup>8+</sup>
3336
3337getResultSet(keyPrefix: string): Promise&lt;KvStoreResultSet&gt;
3338
3339从KVStore数据库中获取具有指定前缀的结果集,使用Promise异步回调。
3340
3341**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3342
3343**参数:**
3344
3345| 参数名  | 类型 | 必填  | 说明                    |
3346| -----  | ------  | ----  | ----------------------- |
3347| keyPrefix  |string   | 是    |表示要匹配的键前缀。 |
3348
3349**返回值:**
3350
3351| 类型    | 说明       |
3352| ------  | -------   |
3353|Promise&lt;[KvStoreResultSet](#kvstoreresultset8)&gt; |Promise对象。返回具有指定前缀的结果集。|
3354
3355**示例:**
3356
3357```js
3358let kvStore;
3359try {
3360    let resultSet;
3361    let entries = [];
3362    for (var i = 0; i < 10; i++) {
3363        var key = 'batch_test_string_key';
3364        var entry = {
3365            key : key + i,
3366            value : {
3367                type : distributedData.ValueType.STRING,
3368                value : 'batch_test_string_value'
3369            }
3370        }
3371        entries.push(entry);
3372    }
3373    kvStore.putBatch(entries).then(async (err) => {
3374        console.log('putBatch success');
3375    }).catch((err) => {
3376        console.log('PutBatch putBatch fail ' + JSON.stringify(err));
3377    });
3378    kvStore.getResultSet('batch_test_string_key').then((result) => {
3379        console.log('GetResult getResultSet succeed.');
3380        resultSet = result;
3381    }).catch((err) => {
3382        console.log('getResultSet failed: ' + JSON.stringify(err));
3383    });
3384    kvStore.closeResultSet(resultSet).then((err) => {
3385        console.log('GetResult closeResultSet success');
3386    }).catch((err) => {
3387        console.log('closeResultSet fail ' + JSON.stringify(err));
3388    });
3389}catch(e) {
3390    console.log('GetResult e ' + e);
3391}
3392```
3393
3394
3395### getResultSet<sup>8+</sup>
3396
3397getResultSet(query: Query, callback: AsyncCallback&lt;KvStoreResultSet&gt;): void
3398
3399获取与指定Query对象匹配的KvStoreResultSet对象,使用callback异步回调。
3400
3401**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3402
3403**参数:**
3404
3405| 参数名  | 类型 | 必填  | 说明                    |
3406| -----  | ------   | ----  | ----------------------- |
3407| query  |Query    | 是    |表示查询对象。             |
3408| callback  |AsyncCallback&lt;[KvStoreResultSet](#kvstoreresultset8)&gt;   | 是    |回调函数,获取与指定Query对象匹配的KvStoreResultSet对象。 |
3409
3410**示例:**
3411
3412```js
3413let kvStore;
3414try {
3415    let resultSet;
3416    let entries = [];
3417    for (var i = 0; i < 10; i++) {
3418        var key = 'batch_test_string_key';
3419        var entry = {
3420            key : key + i,
3421            value : {
3422                type : distributedData.ValueType.STRING,
3423                value : 'batch_test_string_value'
3424            }
3425        }
3426        entries.push(entry);
3427    }
3428    kvStore.putBatch(entries, async function (err, data) {
3429        console.log('putBatch success');
3430        const query = new distributedData.Query();
3431        query.prefixKey("batch_test");
3432        kvStore.getResultSet(query, async function (err, result) {
3433            console.log('getResultSet succeed.');
3434            resultSet = result;
3435        });
3436    });
3437} catch(e) {
3438    console.log('GetResultSet e ' + e);
3439}
3440```
3441
3442
3443### getResultSet<sup>8+</sup>
3444
3445getResultSet(query: Query): Promise&lt;KvStoreResultSet&gt;
3446
3447获取与指定Query对象匹配的KvStoreResultSet对象,使用Promise异步回调。
3448
3449**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3450
3451**参数:**
3452
3453| 参数名  | 类型 | 必填  | 说明                    |
3454| -----  | ------   | ----  | ----------------------- |
3455| query  |[Query](#query8)    | 是    |表示查询对象。             |
3456
3457**返回值:**
3458
3459| 类型    | 说明       |
3460| ------  | -------   |
3461|Promise&lt;[KvStoreResultSet](#kvstoreresultset8)&gt; |Promise对象。获取与指定Query对象匹配的KvStoreResultSet对象。|
3462
3463**示例:**
3464
3465```js
3466let kvStore;
3467try {
3468    let resultSet;
3469    let entries = [];
3470    for (var i = 0; i < 10; i++) {
3471        var key = 'batch_test_string_key';
3472        var entry = {
3473            key : key + i,
3474            value : {
3475                type : distributedData.ValueType.STRING,
3476                value : 'batch_test_string_value'
3477            }
3478        }
3479        entries.push(entry);
3480    }
3481    kvStore.putBatch(entries).then(async (err) => {
3482        console.log('putBatch success');
3483    }).catch((err) => {
3484        console.log('putBatch fail ' + JSON.stringify(err));
3485    });
3486    const query = new distributedData.Query();
3487    query.prefixKey("batch_test");
3488    kvStore.getResultSet(query).then((result) => {
3489        console.log(' getResultSet succeed.');
3490        resultSet = result;
3491    }).catch((err) => {
3492        console.log('getResultSet failed: ' + JSON.stringify(err));
3493    });
3494}catch(e) {
3495    console.log('GetResultSet e ' + e);
3496}
3497```
3498
3499### closeResultSet<sup>8+</sup>
3500
3501closeResultSet(resultSet: KvStoreResultSet, callback: AsyncCallback&lt;void&gt;): void
3502
3503关闭由[SingleKVStore.getResultSet](#getresultset8)返回的KvStoreResultSet对象,使用callback异步回调。
3504
3505**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3506
3507**参数:**
3508
3509| 参数名  | 类型 | 必填  | 说明                    |
3510| -----  | ------   | ----  | ----------------------- |
3511| resultSet  |[KvStoreResultSet](#kvstoreresultset8)   | 是    |表示要关闭的KvStoreResultSet对象。             |
3512| callback  |AsyncCallback&lt;void&gt;   | 是    |回调函数。             |
3513
3514**示例:**
3515
3516```js
3517let kvStore;
3518try {
3519    let resultSet = null;
3520    kvStore.closeResultSet(resultSet, function (err, data) {
3521        if (err == undefined) {
3522            console.log('closeResultSet success');
3523        } else {
3524            console.log('closeResultSet fail');
3525        }
3526    });
3527}catch(e) {
3528    console.log('CloseResultSet e ' + e);
3529}
3530```
3531
3532
3533### closeResultSet<sup>8+</sup>
3534
3535closeResultSet(resultSet: KvStoreResultSet): Promise&lt;void&gt;
3536
3537关闭由[SingleKVStore.getResultSet](#getresultset8)返回的KvStoreResultSet对象,使用Promise异步回调。
3538
3539**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3540
3541**参数:**
3542
3543| 参数名  | 类型 | 必填  | 说明                    |
3544| -----  | ------   | ----  | ----------------------- |
3545| resultSet  |[KvStoreResultSet](#kvstoreresultset8)   | 是    |表示要关闭的KvStoreResultSet对象。             |
3546
3547**返回值:**
3548
3549| 类型    | 说明       |
3550| ------  | -------   |
3551|Promise&lt;void&gt; |无返回结果的Promise对象。|
3552
3553**示例:**
3554
3555```js
3556let kvStore;
3557try {
3558    let resultSet = null;
3559    kvStore.closeResultSet(resultSet).then(() => {
3560        console.log('closeResultSet success');
3561    }).catch((err) => {
3562        console.log('closeResultSet fail ' + JSON.stringify(err));
3563    });
3564}catch(e) {
3565    console.log('CloseResultSet e ' + e);
3566}
3567```
3568
3569
3570### getResultSize<sup>8+</sup>
3571
3572getResultSize(query: Query, callback: AsyncCallback&lt;number&gt;): void
3573
3574获取与指定Query对象匹配的结果数,使用callback异步回调。
3575
3576**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3577
3578**参数:**
3579
3580| 参数名  | 类型 | 必填  | 说明                    |
3581| -----  | ------   | ----  | ----------------------- |
3582| query  |[Query](#query8)   | 是    |表示查询对象。         |
3583| callback  |AsyncCallback&lt;number&gt;   | 是    |回调函数。返回与指定Query对象匹配的结果数。         |
3584
3585**示例:**
3586
3587```js
3588let kvStore;
3589try {
3590    let entries = [];
3591    for (var i = 0; i < 10; i++) {
3592        var key = 'batch_test_string_key';
3593        var entry = {
3594            key : key + i,
3595            value : {
3596                type : distributedData.ValueType.STRING,
3597                value : 'batch_test_string_value'
3598            }
3599        }
3600        entries.push(entry);
3601    }
3602    kvStore.putBatch(entries, async function (err, data) {
3603        console.log('putBatch success');
3604        const query = new distributedData.Query();
3605        query.prefixKey("batch_test");
3606        kvStore.getResultSize(query, async function (err, resultSize) {
3607            console.log('getResultSet succeed.');
3608        });
3609    });
3610} catch(e) {
3611    console.log('GetResultSize e ' + e);
3612}
3613```
3614
3615
3616### getResultSize<sup>8+</sup>
3617
3618getResultSize(query: Query): Promise&lt;number&gt;
3619
3620获取与指定Query对象匹配的结果数,使用Promise异步回调。
3621
3622**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3623
3624**参数:**
3625
3626| 参数名  | 类型 | 必填  | 说明                    |
3627| -----  | ------   | ----  | ----------------------- |
3628| query  |[Query](#query8)   | 是    |表示查询对象。         |
3629
3630**返回值:**
3631
3632| 类型    | 说明       |
3633| ------  | -------   |
3634|Promise&lt;number&gt; |Promise对象。获取与指定Query对象匹配的结果数。|
3635
3636**示例:**
3637
3638```js
3639let kvStore;
3640try {
3641    let entries = [];
3642    for (var i = 0; i < 10; i++) {
3643        var key = 'batch_test_string_key';
3644        var entry = {
3645            key : key + i,
3646            value : {
3647                type : distributedData.ValueType.STRING,
3648                value : 'batch_test_string_value'
3649            }
3650        }
3651        entries.push(entry);
3652    }
3653    kvStore.putBatch(entries).then(async (err) => {
3654        console.log('putBatch success');
3655    }).catch((err) => {
3656        console.log('putBatch fail ' + JSON.stringify(err));
3657    });
3658    const query = new distributedData.Query();
3659    query.prefixKey("batch_test");
3660    kvStore.getResultSize(query).then((resultSize) => {
3661        console.log('getResultSet succeed.');
3662    }).catch((err) => {
3663        console.log('getResultSet failed: ' + JSON.stringify(err));
3664    });
3665}catch(e) {
3666    console.log('GetResultSize e ' + e);
3667}
3668```
3669
3670
3671### removeDeviceData<sup>8+</sup>
3672
3673removeDeviceData(deviceId: string, callback: AsyncCallback&lt;void&gt;): void
3674
3675删除指定设备的数据,使用callback异步回调。
3676> **说明:**
3677>
3678> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
3679> deviceId具体获取方式请参考[sync接口示例](#sync)。
3680
3681**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3682
3683**参数:**
3684
3685| 参数名  | 类型 | 必填  | 说明                    |
3686| -----  | ------   | ----  | ----------------------- |
3687| deviceId  |string   | 是    |表示要删除设备的名称。       |
3688| callback  |AsyncCallback&lt;void&gt;   | 是    |回调函数。      |
3689
3690**示例:**
3691
3692```js
3693let kvStore;
3694const KEY_TEST_STRING_ELEMENT = 'key_test_string_2';
3695const VALUE_TEST_STRING_ELEMENT = 'value-string-002';
3696try {
3697    kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, async function (err,data) {
3698        console.log('put success');
3699        const deviceid = 'no_exist_device_id';
3700        kvStore.removeDeviceData(deviceid, async function (err,data) {
3701            if (err == undefined) {
3702                console.log('removeDeviceData success');
3703            } else {
3704                console.log('removeDeviceData fail');
3705                kvStore.get(KEY_TEST_STRING_ELEMENT, async function (err,data) {
3706                    console.log('RemoveDeviceData get success');
3707                });
3708            }
3709        });
3710    });
3711}catch(e) {
3712    console.log('RemoveDeviceData e ' + e);
3713}
3714```
3715
3716
3717### removeDeviceData<sup>8+</sup>
3718
3719removeDeviceData(deviceId: string): Promise&lt;void&gt;
3720
3721删除指定设备的数据,使用Promise异步回调。
3722> **说明:**
3723>
3724> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
3725> deviceId具体获取方式请参考[sync接口示例](#sync)。
3726
3727**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3728
3729**参数:**
3730
3731| 参数名  | 类型 | 必填  | 说明                    |
3732| -----  | ------   | ----  | ----------------------- |
3733| deviceId  |string   | 是    |表示要删除设备的名称。       |
3734
3735**返回值:**
3736
3737| 类型    | 说明       |
3738| ------  | -------   |
3739|Promise&lt;void&gt; |无返回结果的Promise对象。|
3740
3741**示例:**
3742
3743```js
3744let kvStore;
3745const KEY_TEST_STRING_ELEMENT = 'key_test_string_2';
3746const VALUE_TEST_STRING_ELEMENT = 'value-string-001';
3747try {
3748    kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((err) => {
3749        console.log('removeDeviceData put success');
3750    }).catch((err) => {
3751        console.log('put fail ' + JSON.stringify(err));
3752    });
3753    const deviceid = 'no_exist_device_id';
3754    kvStore.removeDeviceData(deviceid).then((err) => {
3755        console.log('removeDeviceData success');
3756    }).catch((err) => {
3757        console.log('removeDeviceData fail ' + JSON.stringify(err));
3758    });
3759    kvStore.get(KEY_TEST_STRING_ELEMENT).then((data) => {
3760        console.log('get success data:' + data);
3761    }).catch((err) => {
3762        console.log('RemoveDeviceData get fail ' + JSON.stringify(err));
3763    });
3764}catch(e) {
3765    console.log('RemoveDeviceData e ' + e);
3766}
3767```
3768
3769### sync
3770
3771
3772sync(deviceIds: string[], mode: SyncMode, delayMs?: number): void
3773
3774在手动同步方式下,触发数据库同步。
3775> **说明:**
3776>
3777> 其中deviceIds为<!--RP2-->[DeviceInfo](../apis-distributedservice-kit/js-apis-device-manager-sys.md#deviceinfo)中的networkId, 通过调用[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP2End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
3778
3779**需要权限**: ohos.permission.DISTRIBUTED_DATASYNC3780
3781**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3782
3783**参数:**
3784
3785| 参数名    | 类型                  | 必填 | 说明                                           |
3786| --------- | --------------------- | ---- | ---------------------------------------------- |
3787| deviceIds | string[]              | 是   | 同一组网环境下,需要同步的设备的networkId列表。 |
3788| mode      | [SyncMode](#syncmode) | 是   | 同步模式。                                     |
3789| delayMs   | number                | 否   | 可选参数,允许延时时间,单位:ms(毫秒),默认为0。     |
3790
3791**示例:**
3792
3793```js
3794import deviceManager from '@ohos.distributedHardware.deviceManager';
3795
3796let devManager;
3797let kvStore;
3798const KEY_TEST_SYNC_ELEMENT = 'key_test_sync';
3799const VALUE_TEST_SYNC_ELEMENT = 'value-string-001';
3800// create deviceManager
3801deviceManager.createDeviceManager('bundleName', (err, value) => {
3802  if (!err) {
3803    devManager = value;
3804    let deviceIds = [];
3805    if (devManager != null) {
3806      var devices = devManager.getTrustedDeviceListSync();
3807      for (var i = 0; i < devices.length; i++) {
3808        deviceIds[i] = devices[i].networkId;
3809      }
3810    }
3811    try {
3812      kvStore.on('syncComplete', function (data) {
3813        console.log('Sync dataChange');
3814      });
3815      kvStore.put(KEY_TEST_SYNC_ELEMENT + 'testSync101', VALUE_TEST_SYNC_ELEMENT, function (err, data) {
3816        if (err != undefined) {
3817          console.log("put err: " + JSON.stringify(err));
3818          return;
3819        }
3820        console.log('Succeeded in putting data');
3821        const mode = distributedData.SyncMode.PULL_ONLY;
3822        kvStore.sync(deviceIds, mode, 1000);
3823      });
3824    } catch (e) {
3825      console.log('Sync e' + e);
3826    }
3827  }
3828});
3829```
3830
3831### on('dataChange')<sup>8+</sup>
3832
3833on(event: 'dataChange', type: SubscribeType, listener: Callback&lt;ChangeNotification&gt;): void
3834
3835订阅指定类型的数据变更通知。
3836
3837**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
3838
3839**参数:**
3840
3841| 参数名   | 类型                                                      | 必填 | 说明                                                 |
3842| -------- | --------------------------------------------------------- | ---- | ---------------------------------------------------- |
3843| event    | string                                                    | 是   | 订阅的事件名,固定为'dataChange',表示数据变更事件。 |
3844| type     | [SubscribeType](#subscribetype)                           | 是   | 表示订阅的类型。                                     |
3845| listener | Callback&lt;[ChangeNotification](#changenotification)&gt; | 是   | 回调函数。                                           |
3846
3847**示例:**
3848
3849```js
3850let kvStore;
3851kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_LOCAL, function (data) {
3852    console.log("dataChange callback call data: " + JSON.stringify(data));
3853});
3854```
3855
3856### on('syncComplete')<sup>8+</sup>
3857
3858on(event: 'syncComplete', syncCallback: Callback&lt;Array&lt;[string, number]&gt;&gt;): void
3859
3860订阅同步完成事件回调通知。
3861
3862**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
3863
3864**参数:**
3865
3866| 参数名       | 类型                                          | 必填 | 说明                                                   |
3867| ------------ | --------------------------------------------- | ---- | ------------------------------------------------------ |
3868| event        | string                                        | 是   | 订阅的事件名,固定为'syncComplete',表示同步完成事件。 |
3869| syncCallback | Callback&lt;Array&lt;[string, number]&gt;&gt; | 是   | 回调函数。用于向调用方发送同步结果的回调。             |
3870
3871**示例:**
3872
3873```js
3874let kvStore;
3875const KEY_TEST_FLOAT_ELEMENT = 'key_test_float';
3876const VALUE_TEST_FLOAT_ELEMENT = 321.12;
3877try {
3878    kvStore.on('syncComplete', function (data) {
3879        console.log('syncComplete ' + data)
3880    });
3881    kvStore.put(KEY_TEST_FLOAT_ELEMENT, VALUE_TEST_FLOAT_ELEMENT).then((data) => {
3882        console.log('syncComplete put success');
3883    }).catch((error) => {
3884        console.log('syncComplete put fail ' + error);
3885    });
3886}catch(e) {
3887    console.log('syncComplete put e ' + e);
3888}
3889```
3890
3891### off('dataChange')<sup>8+</sup>
3892
3893off(event:'dataChange', listener?: Callback&lt;ChangeNotification&gt;): void
3894
3895取消订阅数据变更通知。
3896
3897**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
3898
3899**参数:**
3900
3901| 参数名   | 类型                                                      | 必填 | 说明                                                     |
3902| -------- | --------------------------------------------------------- | ---- | -------------------------------------------------------- |
3903| event    | string                                                    | 是   | 取消订阅的事件名,固定为'dataChange',表示数据变更事件。 |
3904| listener | Callback&lt;[ChangeNotification](#changenotification)&gt; | 否   | 取消订阅的函数。如不设置callback,则取消所有订阅的函数。 |
3905
3906**示例:**
3907
3908```js
3909let kvStore;
3910class KvstoreModel {
3911    call(data) {
3912        console.log("dataChange: " + data);
3913    }
3914    subscribeDataChange() {
3915        if (kvStore != null) {
3916            kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_REMOTE, this.call);
3917        }
3918    }
3919    unsubscribeDataChange() {
3920        if (kvStore != null) {
3921            kvStore.off('dataChange', this.call);
3922        }
3923    }
3924}
3925```
3926
3927### off('syncComplete')<sup>8+</sup>
3928
3929off(event: 'syncComplete', syncCallback?: Callback&lt;Array&lt;[string, number]&gt;&gt;): void
3930
3931取消订阅同步完成事件回调通知。
3932
3933**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
3934
3935**参数:**
3936
3937| 参数名       | 类型                                          | 必填 | 说明                                                       |
3938| ------------ | --------------------------------------------- | ---- | ---------------------------------------------------------- |
3939| event        | string                                        | 是   | 取消订阅的事件名,固定为'syncComplete',表示同步完成事件。 |
3940| syncCallback | Callback&lt;Array&lt;[string, number]&gt;&gt; | 否   | 取消订阅的函数。如不设置callback,则取消所有订阅的函数。  |
3941
3942**示例:**
3943
3944```js
3945let kvStore;
3946class KvstoreModel {
3947    call(data) {
3948        console.log("syncComplete: " + data);
3949    }
3950    subscribeSyncComplete() {
3951        if (kvStore != null) {
3952            kvStore.on('syncComplete', this.call);
3953        }
3954    }
3955    unsubscribeSyncComplete() {
3956        if (kvStore != null) {
3957            kvStore.off('syncComplete', this.call);
3958        }
3959    }
3960}
3961```
3962
3963### setSyncParam<sup>8+</sup>
3964
3965setSyncParam(defaultAllowedDelayMs: number, callback: AsyncCallback&lt;void&gt;): void
3966
3967设置数据库同步允许的默认延迟,使用callback异步回调。
3968
3969**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
3970
3971**参数:**
3972
3973| 参数名  | 类型 | 必填  | 说明                    |
3974| -----  | ------   | ----  | ----------------------- |
3975| defaultAllowedDelayMs  |number  | 是    |表示数据库同步允许的默认延迟,以毫秒为单位。    |
3976| callback  |AsyncCallback&lt;void&gt;  | 是   |回调函数。   |
3977
3978**示例:**
3979
3980```js
3981let kvStore;
3982try {
3983    const defaultAllowedDelayMs = 500;
3984    kvStore.setSyncParam(defaultAllowedDelayMs, function (err,data) {
3985        console.log('SetSyncParam put success');
3986    });
3987}catch(e) {
3988    console.log('testSingleKvStoreSetSyncParam e ' + e);
3989}
3990```
3991
3992
3993### setSyncParam<sup>8+</sup>
3994
3995setSyncParam(defaultAllowedDelayMs: number): Promise&lt;void&gt;
3996
3997设置数据库同步允许的默认延迟,使用Promise异步回调。
3998
3999**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
4000
4001**参数:**
4002
4003| 参数名  | 类型 | 必填  | 说明                    |
4004| -----  | ------   | ----  | ----------------------- |
4005| defaultAllowedDelayMs  |number  | 是    |表示数据库同步允许的默认延迟,以毫秒为单位。    |
4006
4007
4008**返回值:**
4009
4010| 类型    | 说明       |
4011| ------  | -------   |
4012|Promise&lt;void&gt; |无返回结果的Promise对象。|
4013
4014**示例:**
4015
4016```js
4017let kvStore;
4018try {
4019    const defaultAllowedDelayMs = 500;
4020    kvStore.setSyncParam(defaultAllowedDelayMs).then((err) => {
4021        console.log('SetSyncParam put success');
4022    }).catch((err) => {
4023        console.log('SetSyncParam put fail ' + JSON.stringify(err));
4024    });
4025}catch(e) {
4026    console.log('SetSyncParam e ' + e);
4027}
4028```
4029
4030
4031### getSecurityLevel<sup>8+</sup>
4032
4033getSecurityLevel(callback: AsyncCallback&lt;SecurityLevel&gt;): void
4034
4035获取数据库的安全级别,使用callback异步回调。
4036
4037**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
4038
4039**参数:**
4040
4041| 参数名  | 类型 | 必填  | 说明                    |
4042| -----  | ------   | ----  | ----------------------- |
4043| callback  |AsyncCallback&lt;[SecurityLevel](#securitylevel)&gt;  | 是    |回调函数。返回数据库的安全级别。    |
4044
4045**示例:**
4046
4047```js
4048let kvStore;
4049try {
4050    kvStore.getSecurityLevel(function (err,data) {
4051        console.log('getSecurityLevel success');
4052    });
4053}catch(e) {
4054    console.log('GetSecurityLevel e ' + e);
4055}
4056```
4057
4058
4059### getSecurityLevel<sup>8+</sup>
4060
4061getSecurityLevel(): Promise&lt;SecurityLevel&gt;
4062
4063获取数据库的安全级别,使用Promise异步回调。
4064
4065**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
4066
4067**返回值:**
4068
4069| 类型    | 说明       |
4070| ------  | -------   |
4071|Promise&lt;[SecurityLevel](#securitylevel)&gt; |Promise对象。返回数据库的安全级别。|
4072
4073**示例:**
4074
4075```js
4076let kvStore;
4077try {
4078    kvStore.getSecurityLevel().then((data) => {
4079        console.log(' getSecurityLevel success');
4080    }).catch((err) => {
4081        console.log('getSecurityLevel fail ' + JSON.stringify(err));
4082    });
4083}catch(e) {
4084    console.log('GetSecurityLevel e ' + e);
4085}
4086```
4087
4088
4089## DeviceKVStore<sup>8+</sup>
4090
4091设备协同数据库,继承自KVStore,提供查询数据和同步数据的方法。
4092
4093设备协同数据库,以设备维度对数据进行区分,每台设备仅能写入和修改本设备的数据,其它设备的数据对其是只读的,无法修改其它设备的数据。
4094
4095比如,可以使用设备协同数据库实现设备间的图片分享,可以查看其他设备的图片,但无法修改和删除其他设备的图片。
4096
4097在调用DeviceKVStore的方法前,需要先通过[getKVStore](#getkvstore)构建一个DeviceKVStore实例。
4098
4099### get<sup>8+</sup>
4100
4101get(deviceId: string, key: string, callback: AsyncCallback&lt;boolean|string|number|Uint8Array&gt;): void
4102
4103获取与指定设备ID和key匹配的string值,使用callback异步回调。
4104> **说明:**
4105>
4106> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
4107> deviceId具体获取方式请参考[sync接口示例](#sync)。
4108
4109**系统能力:**   SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4110
4111**参数:**
4112
4113| 参数名  | 类型 | 必填  | 说明                    |
4114| -----  | ------   | ----  | ----------------------- |
4115| deviceId  |string  | 是    |标识要查询其数据的设备。    |
4116| key       |string  | 是    |表示要查询key值的键。    |
4117| callback  |AsyncCallback&lt;boolean\|string\|number\|Uint8Array&gt;  | 是    |回调函数,返回匹配给定条件的字符串值。    |
4118
4119**示例:**
4120
4121```js
4122let kvStore;
4123const KEY_TEST_STRING_ELEMENT = 'key_test_string_2';
4124const VALUE_TEST_STRING_ELEMENT = 'value-string-002';
4125try{
4126    kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, async function (err,data) {
4127        console.log('put success');
4128        kvStore.get('localDeviceId', KEY_TEST_STRING_ELEMENT, function (err,data) {
4129            console.log('get success');
4130        });
4131    })
4132}catch(e) {
4133    console.log('get e' + e);
4134}
4135```
4136
4137
4138### get<sup>8+</sup>
4139
4140get(deviceId: string, key: string): Promise&lt;boolean|string|number|Uint8Array&gt;
4141
4142获取与指定设备ID和key匹配的string值,使用Promise异步回调。
4143> **说明:**
4144>
4145> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
4146> deviceId具体获取方式请参考[sync接口示例](#sync)。
4147
4148**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4149
4150**参数:**
4151
4152| 参数名  | 类型 | 必填  | 说明                    |
4153| -----  | ------   | ----  | ----------------------- |
4154| deviceId  |string  | 是    |标识要查询其数据的设备。    |
4155| key       |string  | 是    |表示要查询key值的键。    |
4156
4157**返回值:**
4158
4159| 类型    | 说明       |
4160| ------  | -------   |
4161|Promise&lt;boolean\|string\|number\|Uint8Array&gt; |Promise对象。返回匹配给定条件的字符串值。|
4162
4163**示例:**
4164
4165```js
4166let kvStore;
4167const KEY_TEST_STRING_ELEMENT = 'key_test_string_2';
4168const VALUE_TEST_STRING_ELEMENT = 'value-string-002';
4169try {
4170    kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then(async (data) => {
4171        console.log(' put success');
4172        kvStore.get('localDeviceId', KEY_TEST_STRING_ELEMENT).then((data) => {
4173            console.log('get success');
4174        }).catch((err) => {
4175            console.log('get fail ' + JSON.stringify(err));
4176        });
4177    }).catch((error) => {
4178        console.log('put error' + error);
4179    });
4180} catch (e) {
4181    console.log('Get e ' + e);
4182}
4183```
4184
4185
4186### getEntries<sup>8+</sup>
4187
4188getEntries(deviceId: string, keyPrefix: string, callback: AsyncCallback&lt;Entry[]&gt;): void
4189
4190获取与指定设备ID和key前缀匹配的所有键值对,使用callback异步回调。
4191> **说明:**
4192>
4193> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
4194> deviceId具体获取方式请参考[sync接口示例](#sync)。
4195
4196**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4197
4198**参数:**
4199
4200| 参数名  | 类型 | 必填  | 说明                    |
4201| -----  | ------   | ----  | ----------------------- |
4202| deviceId  |string  | 是    |标识要查询其数据的设备。    |
4203| keyPrefix |string  | 是    |表示要匹配的键前缀。    |
4204| callback  |AsyncCallback&lt;[Entry](#entry)[]&gt;  | 是  |回调函数,返回满足给定条件的所有键值对的列表。    |
4205
4206**示例:**
4207
4208```js
4209let kvStore;
4210try {
4211    let entries = [];
4212    for (var i = 0; i < 10; i++) {
4213        var key = 'batch_test_string_key';
4214        var entry = {
4215            key : key + i,
4216            value : {
4217                type : distributedData.ValueType.STRING,
4218                value : 'batch_test_string_value'
4219            }
4220        }
4221        entries.push(entry);
4222    }
4223    console.log('entries: ' + entries);
4224    kvStore.putBatch(entries, async function (err,data) {
4225        console.log('putBatch success');
4226        kvStore.getEntries('localDeviceId', 'batch_test_string_key', function (err,entries) {
4227            console.log('getEntries success');
4228            console.log('entries.length: ' + entries.length);
4229            console.log('entries[0]: ' + JSON.stringify(entries[0]));
4230        });
4231    });
4232}catch(e) {
4233    console.log('PutBatch e ' + e);
4234}
4235```
4236
4237
4238### getEntries<sup>8+</sup>
4239
4240getEntries(deviceId: string, keyPrefix: string): Promise&lt;Entry[]&gt;
4241
4242获取与指定设备ID和key前缀匹配的所有键值对,使用Promise异步回调。
4243> **说明:**
4244>
4245> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
4246> deviceId具体获取方式请参考[sync接口示例](#sync)。
4247
4248**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4249
4250**参数:**
4251
4252| 参数名  | 类型 | 必填  | 说明                    |
4253| -----  | ------   | ----  | ----------------------- |
4254| deviceId  |string  | 是    |标识要查询其数据的设备。    |
4255| keyPrefix |string  | 是    |表示要匹配的键前缀。    |
4256
4257**返回值:**
4258
4259| 类型    | 说明       |
4260| ------  | -------   |
4261|Promise&lt;[Entry](#entry)[]&gt; |Promise对象。返回匹配给定条件的所有键值对的列表。|
4262
4263**示例:**
4264
4265```js
4266let kvStore;
4267try {
4268    let entries = [];
4269    for (var i = 0; i < 10; i++) {
4270        var key = 'batch_test_string_key';
4271        var entry = {
4272            key : key + i,
4273            value : {
4274                type : distributedData.ValueType.STRING,
4275                value : 'batch_test_string_value'
4276            }
4277        }
4278        entries.push(entry);
4279    }
4280    console.log('entries: ' + entries);
4281    kvStore.putBatch(entries).then(async (err) => {
4282        console.log('putBatch success');
4283        kvStore.getEntries('localDeviceId', 'batch_test_string_key').then((entries) => {
4284            console.log('getEntries success');
4285            console.log('entries.length: ' + entries.length);
4286            console.log('entries[0]: ' + JSON.stringify(entries[0]));
4287            console.log('entries[0].value: ' + JSON.stringify(entries[0].value));
4288            console.log('entries[0].value.value: ' + entries[0].value.value);
4289        }).catch((err) => {
4290            console.log('getEntries fail ' + JSON.stringify(err));
4291        });
4292    }).catch((err) => {
4293        console.log('putBatch fail ' + JSON.stringify(err));
4294    });
4295}catch(e) {
4296    console.log('PutBatch e ' + e);
4297}
4298```
4299
4300
4301### getEntries<sup>8+</sup>
4302
4303getEntries(query: Query, callback: AsyncCallback&lt;Entry[]&gt;): void
4304
4305获取与指定Query对象匹配的键值对列表,使用callback异步回调。
4306
4307**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4308
4309**参数:**
4310
4311| 参数名  | 类型 | 必填  | 说明                    |
4312| -----  | ------   | ----  | ----------------------- |
4313| query  |[Query](#query8)  | 是    |表示查询对象。    |
4314| callback |AsyncCallback&lt;[Entry](#entry)[]&gt;  | 是    |回调函数,返回与指定Query对象匹配的键值对列表。    |
4315
4316**示例:**
4317
4318```js
4319let kvStore;
4320try {
4321    var arr = new Uint8Array([21,31]);
4322    let entries = [];
4323    for (var i = 0; i < 10; i++) {
4324        var key = 'batch_test_bool_key';
4325        var entry = {
4326            key : key + i,
4327            value : {
4328                type : distributedData.ValueType.BYTE_ARRAY,
4329                value : arr
4330            }
4331        }
4332        entries.push(entry);
4333    }
4334    console.log('entries: ' + JSON.stringify(entries));
4335    kvStore.putBatch(entries, async function (err,data) {
4336        console.log('putBatch success');
4337        const query = new distributedData.Query();
4338        query.prefixKey("batch_test");
4339        query.deviceId('localDeviceId');
4340        kvStore.getEntries(query, function (err,entries) {
4341            console.log('getEntries success');
4342            console.log('entries.length: ' + entries.length);
4343            console.log('entries[0]: ' + JSON.stringify(entries[0]));
4344        });
4345    });
4346    console.log('GetEntries success');
4347}catch(e) {
4348    console.log('GetEntries e ' + e);
4349}
4350```
4351
4352
4353### getEntries<sup>8+</sup>
4354
4355getEntries(query: Query): Promise&lt;Entry[]&gt;
4356
4357获取与指定Query对象匹配的键值对列表,使用Promise异步回调。
4358
4359**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4360
4361**参数:**
4362
4363| 参数名  | 类型 | 必填  | 说明                    |
4364| -----  | ------   | ----  | ----------------------- |
4365| query  |[Query](#query8)  | 是    |表示查询对象。    |
4366
4367**返回值:**
4368
4369| 类型    | 说明       |
4370| ------  | -------   |
4371|Promise&lt;[Entry](#entry)[]&gt; |Promise对象。返回与指定Query对象匹配的键值对列表。|
4372
4373**示例:**
4374
4375```js
4376let kvStore;
4377try {
4378    var arr = new Uint8Array([21,31]);
4379    let entries = [];
4380    for (var i = 0; i < 10; i++) {
4381        var key = 'batch_test_bool_key';
4382        var entry = {
4383            key : key + i,
4384            value : {
4385                type : distributedData.ValueType.BYTE_ARRAY,
4386                value : arr
4387            }
4388        }
4389        entries.push(entry);
4390    }
4391    console.log('entries: ' + JSON.stringify(entries));
4392    kvStore.putBatch(entries).then(async (err) => {
4393        console.log('putBatch success');
4394        const query = new distributedData.Query();
4395        query.prefixKey("batch_test");
4396        kvStore.getEntries(query).then((entries) => {
4397            console.log('getEntries success');
4398        }).catch((err) => {
4399            console.log('getEntries fail ' + JSON.stringify(err));
4400        });
4401    }).catch((err) => {
4402        console.log('GetEntries putBatch fail ' + JSON.stringify(err))
4403    });
4404    console.log('GetEntries success');
4405}catch(e) {
4406    console.log('GetEntries e ' + e);
4407}
4408```
4409
4410
4411### getEntries<sup>8+</sup>
4412
4413getEntries(deviceId: string, query: Query, callback: AsyncCallback&lt;Entry[]&gt;): void
4414
4415获取与指定设备ID和Query对象匹配的键值对列表,使用callback异步回调。
4416> **说明:**
4417>
4418> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
4419> deviceId具体获取方式请参考[sync接口示例](#sync)。
4420
4421**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4422
4423**参数:**
4424
4425| 参数名  | 类型 | 必填  | 说明                    |
4426| -----  | ------   | ----  | ----------------------- |
4427| deviceId  |string  | 是    |键值对所属的设备ID。    |
4428| query  |[Query](#query8)  | 是    |表示查询对象。    |
4429| callback |AsyncCallback&lt;[Entry](#entry)[]&gt;  | 是    |回调函数。返回与指定设备ID和Query对象匹配的键值对列表。    |
4430
4431**示例:**
4432
4433```js
4434let kvStore;
4435try {
4436    var arr = new Uint8Array([21,31]);
4437    let entries = [];
4438    for (var i = 0; i < 10; i++) {
4439        var key = 'batch_test_bool_key';
4440        var entry = {
4441            key : key + i,
4442            value : {
4443                type : distributedData.ValueType.BYTE_ARRAY,
4444                value : arr
4445            }
4446        }
4447        entries.push(entry);
4448    }
4449    console.log('entries: ' + JSON.stringify(entries));
4450    kvStore.putBatch(entries, async function (err,data) {
4451        console.log('putBatch success');
4452        var query = new distributedData.Query();
4453        query.deviceId('localDeviceId');
4454        query.prefixKey("batch_test");
4455        kvStore.getEntries('localDeviceId', query, function (err,entries) {
4456            console.log('getEntries success');
4457            console.log('entries.length: ' + entries.length);
4458            console.log('entries[0]: ' + JSON.stringify(entries[0]));
4459        })
4460    });
4461    console.log('GetEntries success');
4462}catch(e) {
4463    console.log('GetEntries e ' + e);
4464}
4465```
4466
4467
4468### getEntries<sup>8+</sup>
4469
4470getEntries(deviceId: string, query: Query): Promise&lt;Entry[]&gt;
4471
4472获取与指定设备ID和Query对象匹配的键值对列表,使用Promise异步回调。
4473> **说明:**
4474>
4475> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
4476> deviceId具体获取方式请参考[sync接口示例](#sync)。
4477
4478**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4479
4480**参数:**
4481
4482| 参数名  | 类型 | 必填  | 说明                    |
4483| -----  | ------   | ----  | ----------------------- |
4484| deviceId  |string  | 是    |键值对所属的设备ID。    |
4485| query  |[Query](#query8)  | 是    |表示查询对象。    |
4486
4487**返回值:**
4488
4489| 类型    | 说明       |
4490| ------  | -------   |
4491|Promise&lt;[Entry](#entry)[]&gt; |Promise对象。返回与指定设备ID和Query对象匹配的键值对列表。|
4492
4493**示例:**
4494
4495```js
4496let kvStore;
4497try {
4498    var arr = new Uint8Array([21,31]);
4499    let entries = [];
4500    for (var i = 0; i < 10; i++) {
4501        var key = 'batch_test_bool_key';
4502        var entry = {
4503            key : key + i,
4504            value : {
4505                type : distributedData.ValueType.BYTE_ARRAY,
4506                value : arr
4507            }
4508        }
4509        entries.push(entry);
4510    }
4511    console.log('entries: ' + JSON.stringify(entries));
4512    kvStore.putBatch(entries).then(async (err) => {
4513        console.log('putBatch success');
4514        var query = new distributedData.Query();
4515        query.deviceId('localDeviceId');
4516        query.prefixKey("batch_test");
4517        kvStore.getEntries('localDeviceId', query).then((entries) => {
4518            console.log('getEntries success');
4519        }).catch((err) => {
4520            console.log('getEntries fail ' + JSON.stringify(err));
4521        });
4522    }).catch((err) => {
4523        console.log('putBatch fail ' + JSON.stringify(err));
4524    });
4525    console.log('GetEntries success');
4526}catch(e) {
4527    console.log('GetEntries e ' + e);
4528}
4529```
4530
4531
4532### getResultSet<sup>8+</sup>
4533
4534getResultSet(deviceId: string, keyPrefix: string, callback: AsyncCallback&lt;KvStoreResultSet&gt;): void
4535
4536获取与指定设备ID和key前缀匹配的KvStoreResultSet对象,使用callback异步回调。
4537> **说明:**
4538>
4539> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
4540> deviceId具体获取方式请参考[sync接口示例](#sync)。
4541
4542**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4543
4544**参数:**
4545
4546| 参数名  | 类型 | 必填  | 说明                    |
4547| -----  | ------   | ----  | ----------------------- |
4548| deviceId  |string  | 是    |标识要查询其数据的设备。    |
4549| keyPrefix |string  | 是    |表示要匹配的键前缀。    |
4550| callback  |AsyncCallback&lt;[KvStoreResultSet](#kvstoreresultset8)&gt;  | 是  |回调函数。返回与指定设备ID和key前缀匹配的KvStoreResultSet对象。    |
4551
4552**示例:**
4553
4554```js
4555let kvStore;
4556try {
4557    let resultSet;
4558    kvStore.getResultSet('localDeviceId', 'batch_test_string_key', async function (err, result) {
4559        console.log('getResultSet succeed.');
4560        resultSet = result;
4561        kvStore.closeResultSet(resultSet, function (err, data) {
4562            console.log('closeResultSet success');
4563        })
4564    });
4565}catch(e) {
4566    console.log('GetResultSet e ' + e);
4567}
4568```
4569
4570
4571### getResultSet<sup>8+</sup>
4572
4573getResultSet(deviceId: string, keyPrefix: string): Promise&lt;KvStoreResultSet&gt;
4574
4575获取与指定设备ID和key前缀匹配的KvStoreResultSet对象,使用Promise异步回调。
4576> **说明:**
4577>
4578> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
4579> deviceId具体获取方式请参考[sync接口示例](#sync)。
4580
4581**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4582
4583**参数:**
4584
4585| 参数名  | 类型 | 必填  | 说明                    |
4586| -----  | ------   | ----  | ----------------------- |
4587| deviceId  |string  | 是    |标识要查询其数据的设备。    |
4588| keyPrefix |string  | 是    |表示要匹配的键前缀。    |
4589
4590**返回值:**
4591
4592| 类型    | 说明       |
4593| ------  | -------   |
4594|Promise&lt;[KvStoreResultSet](#kvstoreresultset8)&gt; |Promise对象。返回与指定设备ID和key前缀匹配的KvStoreResultSet对象。|
4595
4596**示例:**
4597
4598```js
4599let kvStore;
4600try {
4601    let resultSet;
4602    kvStore.getResultSet('localDeviceId', 'batch_test_string_key').then((result) => {
4603        console.log('getResultSet succeed.');
4604        resultSet = result;
4605    }).catch((err) => {
4606        console.log('getResultSet failed: ' + JSON.stringify(err));
4607    });
4608    kvStore.closeResultSet(resultSet).then((err) => {
4609        console.log('closeResultSet success');
4610    }).catch((err) => {
4611        console.log('closeResultSet fail ' + JSON.stringify(err));
4612    });
4613}catch(e) {
4614    console.log('GetResultSet e ' + e);
4615}
4616```
4617
4618
4619### getResultSet<sup>8+</sup>
4620
4621getResultSet(query: Query, callback: AsyncCallback&lt;KvStoreResultSet&gt;): void
4622
4623获取与指定Query对象匹配的KvStoreResultSet对象,使用callback异步回调。
4624
4625**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4626
4627**参数:**
4628
4629| 参数名  | 类型 | 必填  | 说明                    |
4630| -----  | ------   | ----  | ----------------------- |
4631| query  |[Query](#query8)  | 是    |表示查询对象。    |
4632| callback  |AsyncCallback&lt;[KvStoreResultSet](#kvstoreresultset8)&gt;  | 是  |回调函数,返回与指定Query对象匹配的KvStoreResultSet对象。    |
4633
4634**示例:**
4635
4636```js
4637let kvStore;
4638try {
4639    let resultSet;
4640    let entries = [];
4641    for (var i = 0; i < 10; i++) {
4642        var key = 'batch_test_string_key';
4643        var entry = {
4644            key : key + i,
4645            value : {
4646                type : distributedData.ValueType.STRING,
4647                value : 'batch_test_string_value'
4648            }
4649        }
4650        entries.push(entry);
4651    }
4652    kvStore.putBatch(entries, async function (err, data) {
4653        console.log('putBatch success');
4654        const query = new distributedData.Query();
4655        query.prefixKey("batch_test");
4656        query.deviceId('localDeviceId');
4657        kvStore.getResultSet(query, async function (err, result) {
4658            console.log('getResultSet succeed.');
4659            resultSet = result;
4660            kvStore.closeResultSet(resultSet, function (err, data) {
4661                console.log('closeResultSet success');
4662            })
4663        });
4664    });
4665} catch(e) {
4666    console.log('GetResultSet e ' + e);
4667}
4668```
4669
4670
4671### getResultSet<sup>8+</sup>
4672
4673getResultSet(query: Query): Promise&lt;KvStoreResultSet&gt;
4674
4675获取与指定Query对象匹配的KvStoreResultSet对象,使用Promise异步回调。
4676
4677**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4678
4679**参数:**
4680
4681| 参数名  | 类型 | 必填  | 说明                    |
4682| -----  | ------   | ----  | ----------------------- |
4683| query  |[Query](#query8)  | 是    |表示查询对象。    |
4684
4685**返回值:**
4686
4687| 类型    | 说明       |
4688| ------  | -------   |
4689|Promise&lt;[KvStoreResultSet](#kvstoreresultset8)&gt; |Promise对象。返回与指定Query对象匹配的KvStoreResultSet对象。|
4690
4691**示例:**
4692
4693```js
4694let kvStore;
4695try {
4696    let resultSet;
4697    let entries = [];
4698    for (var i = 0; i < 10; i++) {
4699        var key = 'batch_test_string_key';
4700        var entry = {
4701            key : key + i,
4702            value : {
4703                type : distributedData.ValueType.STRING,
4704                value : 'batch_test_string_value'
4705            }
4706        }
4707        entries.push(entry);
4708    }
4709    kvStore.putBatch(entries).then(async (err) => {
4710        console.log('putBatch success');
4711    }).catch((err) => {
4712        console.log('putBatch fail ' + err);
4713    });
4714    const query = new distributedData.Query();
4715    query.deviceId('localDeviceId');
4716    query.prefixKey("batch_test");
4717    console.log("GetResultSet " + query.getSqlLike());
4718    kvStore.getResultSet(query).then((result) => {
4719        console.log('getResultSet succeed.');
4720        resultSet = result;
4721    }).catch((err) => {
4722        console.log('getResultSet failed: ' + JSON.stringify(err));
4723    });
4724    kvStore.closeResultSet(resultSet).then((err) => {
4725        console.log('closeResultSet success');
4726    }).catch((err) => {
4727        console.log('closeResultSet fail ' + JSON.stringify(err));
4728    });
4729}catch(e) {
4730    console.log('GetResultSet e ' + e);
4731}
4732```
4733
4734
4735### getResultSet<sup>8+</sup>
4736
4737getResultSet(deviceId: string, query: Query, callback: AsyncCallback&lt;KvStoreResultSet&gt;): void
4738
4739获取与指定设备ID和Query对象匹配的KvStoreResultSet对象,使用callback异步回调。
4740> **说明:**
4741>
4742> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
4743> deviceId具体获取方式请参考[sync接口示例](#sync)。
4744
4745**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4746
4747**参数:**
4748
4749| 参数名  | 类型 | 必填  | 说明                    |
4750| -----  | ------   | ----  | ----------------------- |
4751| deviceId  |string  | 是    |KvStoreResultSet对象所属的设备ID。    |
4752| query  |[Query](#query8)  | 是    |表示查询对象。    |
4753| callback  |AsyncCallback&lt;[KvStoreResultSet](#kvstoreresultset8)&gt;  | 是  |回调函数。返回与指定设备ID和Query对象匹配的KvStoreResultSet对象。    |
4754
4755**示例:**
4756
4757```js
4758let kvStore;
4759try {
4760    let resultSet;
4761    let entries = [];
4762    for (var i = 0; i < 10; i++) {
4763        var key = 'batch_test_string_key';
4764        var entry = {
4765            key : key + i,
4766            value : {
4767                type : distributedData.ValueType.STRING,
4768                value : 'batch_test_string_value'
4769            }
4770        }
4771        entries.push(entry);
4772    }
4773    kvStore.putBatch(entries, async function (err, data) {
4774        console.log('putBatch success');
4775        const query = new distributedData.Query();
4776        query.prefixKey("batch_test");
4777        kvStore.getResultSet('localDeviceId', query, async function (err, result) {
4778            console.log('getResultSet succeed.');
4779            resultSet = result;
4780            kvStore.closeResultSet(resultSet, function (err, data) {
4781                console.log('closeResultSet success');
4782            })
4783        });
4784    });
4785} catch(e) {
4786    console.log('GetResultSet e ' + e);
4787}
4788```
4789
4790
4791### getResultSet<sup>8+</sup>
4792
4793getResultSet(deviceId: string, query: Query): Promise&lt;KvStoreResultSet&gt;
4794
4795获取与指定设备ID和Query对象匹配的KvStoreResultSet对象,使用Promise异步回调。
4796> **说明:**
4797>
4798> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
4799> deviceId具体获取方式请参考[sync接口示例](#sync)。
4800
4801**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4802
4803**参数:**
4804
4805| 参数名  | 类型 | 必填  | 说明                    |
4806| -----  | ------   | ----  | ----------------------- |
4807| deviceId  |string  | 是    |KvStoreResultSet对象所属的设备ID。    |
4808| query  |[Query](#query8)  | 是    |表示查询对象。    |
4809
4810**返回值:**
4811
4812| 类型    | 说明       |
4813| ------  | -------   |
4814|Promise&lt;[KvStoreResultSet](#kvstoreresultset8)&gt; |Promise对象。返回与指定设备ID和Query对象匹配的KvStoreResultSet对象。|
4815
4816**示例:**
4817
4818```js
4819let kvStore;
4820try {
4821    let resultSet;
4822    let entries = [];
4823    for (var i = 0; i < 10; i++) {
4824        var key = 'batch_test_string_key';
4825        var entry = {
4826            key : key + i,
4827            value : {
4828                type : distributedData.ValueType.STRING,
4829                value : 'batch_test_string_value'
4830            }
4831        }
4832        entries.push(entry);
4833    }
4834    kvStore.putBatch(entries).then(async (err) => {
4835        console.log('GetResultSet putBatch success');
4836    }).catch((err) => {
4837        console.log('PutBatch putBatch fail ' + JSON.stringify(err));
4838    });
4839    const query = new distributedData.Query();
4840    query.prefixKey("batch_test");
4841    kvStore.getResultSet('localDeviceId', query).then((result) => {
4842        console.log('GetResultSet getResultSet succeed.');
4843        resultSet = result;
4844    }).catch((err) => {
4845        console.log('GetResultSet getResultSet failed: ' + JSON.stringify(err));
4846    });
4847    query.deviceId('localDeviceId');
4848    console.log("GetResultSet " + query.getSqlLike());
4849    kvStore.closeResultSet(resultSet).then((err) => {
4850        console.log('GetResultSet closeResultSet success');
4851    }).catch((err) => {
4852        console.log('GetResultSet closeResultSet fail ' + JSON.stringify(err));
4853    });
4854
4855}catch(e) {
4856    console.log('GetResultSet e ' + e);
4857}
4858```
4859
4860
4861### closeResultSet<sup>8+</sup>
4862
4863closeResultSet(resultSet: KvStoreResultSet, callback: AsyncCallback&lt;void&gt;): void
4864
4865关闭由[DeviceKVStore.getResultSet](#getresultset8-4)返回的KvStoreResultSet对象,使用callback异步回调。
4866
4867**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4868
4869**参数:**
4870
4871| 参数名  | 类型 | 必填  | 说明                    |
4872| -----  | ------   | ----  | ----------------------- |
4873| resultSet  |[KvStoreResultSet](#kvstoreresultset8)  | 是    |指示要关闭的KvStoreResultSet对象。   |
4874| callback   |AsyncCallback&lt;void&gt;                 | 是    |回调函数。    |
4875
4876**示例:**
4877
4878```js
4879let kvStore;
4880try {
4881    console.log('CloseResultSet success');
4882    let resultSet = null;
4883    kvStore.closeResultSet(resultSet, function (err, data) {
4884        if (err == undefined) {
4885            console.log('closeResultSet success');
4886        } else {
4887            console.log('closeResultSet fail');
4888        }
4889    });
4890}catch(e) {
4891    console.log('CloseResultSet e ' + e);
4892}
4893```
4894
4895
4896### closeResultSet<sup>8+</sup>
4897
4898closeResultSet(resultSet: KvStoreResultSet): Promise&lt;void&gt;
4899
4900关闭由[DeviceKVStore.getResultSet](#getresultset8-4)返回的KvStoreResultSet对象,使用Promise异步回调。
4901
4902**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4903
4904**参数:**
4905
4906| 参数名  | 类型 | 必填  | 说明                    |
4907| -----  | ------   | ----  | ----------------------- |
4908| resultSet  |[KvStoreResultSet](#kvstoreresultset8)  | 是    |指示要关闭的KvStoreResultSet对象。   |
4909
4910**返回值:**
4911
4912| 类型    | 说明       |
4913| ------  | -------   |
4914|Promise&lt;void&gt; |无返回结果的Promise对象。|
4915
4916**示例:**
4917
4918```js
4919let kvStore;
4920try {
4921    console.log('CloseResultSet success');
4922    let resultSet = null;
4923    kvStore.closeResultSet(resultSet).then(() => {
4924        console.log('closeResultSet success');
4925    }).catch((err) => {
4926        console.log('closeResultSet fail ' + JSON.stringify(err));
4927    });
4928}catch(e) {
4929    console.log('CloseResultSet e ' + e);
4930}
4931```
4932
4933
4934### getResultSize<sup>8+</sup>
4935
4936getResultSize(query: Query, callback: AsyncCallback&lt;number&gt;): void
4937
4938获取与指定Query对象匹配的结果数,使用callback异步回调。
4939
4940**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4941
4942**参数:**
4943
4944| 参数名  | 类型 | 必填  | 说明                    |
4945| -----  | ------   | ----  | ----------------------- |
4946| query     |[Query](#query8)       | 是    |表示查询对象。    |
4947| callback  |AsyncCallback&lt;number&gt;  | 是    |回调函数,返回与指定Query对象匹配的结果数。    |
4948
4949**示例:**
4950
4951```js
4952let kvStore;
4953try {
4954    let entries = [];
4955    for (var i = 0; i < 10; i++) {
4956        var key = 'batch_test_string_key';
4957        var entry = {
4958            key : key + i,
4959            value : {
4960                type : distributedData.ValueType.STRING,
4961                value : 'batch_test_string_value'
4962            }
4963        }
4964        entries.push(entry);
4965    }
4966    kvStore.putBatch(entries, async function (err, data) {
4967        console.log('putBatch success');
4968        const query = new distributedData.Query();
4969        query.prefixKey("batch_test");
4970        query.deviceId('localDeviceId');
4971        kvStore.getResultSize(query, async function (err, resultSize) {
4972            console.log('getResultSet succeed.');
4973        });
4974    });
4975} catch(e) {
4976    console.log('GetResultSize e ' + e);
4977}
4978```
4979
4980
4981### getResultSize<sup>8+</sup>
4982
4983getResultSize(query: Query): Promise&lt;number&gt;
4984
4985获取与指定Query对象匹配的结果数,使用Promise异步回调。
4986
4987**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
4988
4989**参数:**
4990
4991| 参数名  | 类型 | 必填  | 说明                    |
4992| -----  | ------   | ----  | ----------------------- |
4993| query     |[Query](#query8)       | 是    |表示查询对象。    |
4994
4995**返回值:**
4996
4997| 类型    | 说明       |
4998| ------  | -------   |
4999|Promise&lt;number&gt; |Promise对象。返回与指定Query对象匹配的结果数。|
5000
5001**示例:**
5002
5003```js
5004let kvStore;
5005try {
5006    let entries = [];
5007    for (var i = 0; i < 10; i++) {
5008        var key = 'batch_test_string_key';
5009        var entry = {
5010            key : key + i,
5011            value : {
5012                type : distributedData.ValueType.STRING,
5013                value : 'batch_test_string_value'
5014            }
5015        }
5016        entries.push(entry);
5017    }
5018    kvStore.putBatch(entries).then(async (err) => {
5019        console.log('putBatch success');
5020    }).catch((err) => {
5021        console.log('putBatch fail ' + JSON.stringify(err));
5022    });
5023    const query = new distributedData.Query();
5024    query.prefixKey("batch_test");
5025    query.deviceId('localDeviceId');
5026    kvStore.getResultSize(query).then((resultSize) => {
5027        console.log('getResultSet succeed.');
5028    }).catch((err) => {
5029        console.log('getResultSet failed: ' + JSON.stringify(err));
5030    });
5031}catch(e) {
5032    console.log('GetResultSize e ' + e);
5033}
5034```
5035
5036
5037### getResultSize<sup>8+</sup>
5038
5039getResultSize(deviceId: string, query: Query, callback: AsyncCallback&lt;number&gt;): void;
5040
5041获取与指定设备ID和Query对象匹配的结果数,使用callback异步回调。
5042> **说明:**
5043>
5044> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
5045> deviceId具体获取方式请参考[sync接口示例](#sync)。
5046
5047**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
5048
5049**参数:**
5050
5051| 参数名  | 类型 | 必填  | 说明                    |
5052| -----  | ------   | ----  | ----------------------- |
5053| deviceId  |string                       | 是    |KvStoreResultSet对象所属的设备ID。    |
5054| query     |[Query](#query8)       | 是    |表示查询对象。    |
5055| callback  |AsyncCallback&lt;number&gt;  | 是    |回调函数。返回与指定设备ID和Query对象匹配的结果数。    |
5056
5057**示例:**
5058
5059```js
5060let kvStore;
5061try {
5062    let entries = [];
5063    for (var i = 0; i < 10; i++) {
5064        var key = 'batch_test_string_key';
5065        var entry = {
5066            key : key + i,
5067            value : {
5068                type : distributedData.ValueType.STRING,
5069                value : 'batch_test_string_value'
5070            }
5071        }
5072        entries.push(entry);
5073    }
5074    kvStore.putBatch(entries, async function (err, data) {
5075        console.log('putBatch success');
5076        const query = new distributedData.Query();
5077        query.prefixKey("batch_test");
5078        kvStore.getResultSize('localDeviceId', query, async function (err, resultSize) {
5079            console.log('getResultSet succeed.');
5080        });
5081    });
5082} catch(e) {
5083    console.log('GetResultSize e ' + e);
5084}
5085```
5086
5087
5088### getResultSize<sup>8+</sup>
5089
5090getResultSize(deviceId: string, query: Query): Promise&lt;number&gt;
5091
5092获取与指定设备ID和Query对象匹配的结果数,使用Promise异步回调。
5093> **说明:**
5094>
5095> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
5096> deviceId具体获取方式请参考[sync接口示例](#sync)。
5097
5098**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
5099
5100**参数:**
5101
5102| 参数名  | 类型 | 必填  | 说明                    |
5103| -----  | ------   | ----  | ----------------------- |
5104| deviceId  |string                       | 是    |KvStoreResultSet对象所属的设备ID。    |
5105| query     |[Query](#query8)       | 是    |表示查询对象。    |
5106
5107**返回值:**
5108
5109| 类型    | 说明       |
5110| ------  | -------   |
5111|Promise&lt;number&gt; |Promise对象。返回与指定设备ID和Query对象匹配的结果数。|
5112
5113**示例:**
5114
5115```js
5116let kvStore;
5117try {
5118    let entries = [];
5119    for (var i = 0; i < 10; i++) {
5120        var key = 'batch_test_string_key';
5121        var entry = {
5122            key : key + i,
5123            value : {
5124                type : distributedData.ValueType.STRING,
5125                value : 'batch_test_string_value'
5126            }
5127        }
5128        entries.push(entry);
5129    }
5130    kvStore.putBatch(entries).then(async (err) => {
5131        console.log('putBatch success');
5132    }).catch((err) => {
5133        console.log('putBatch fail ' + JSON.stringify(err));
5134    });
5135    var query = new distributedData.Query();
5136    query.prefixKey("batch_test");
5137    kvStore.getResultSize('localDeviceId', query).then((resultSize) => {
5138        console.log('getResultSet succeed.');
5139    }).catch((err) => {
5140        console.log('getResultSet failed: ' + JSON.stringify(err));
5141    });
5142}catch(e) {
5143    console.log('GetResultSize e ' + e);
5144}
5145```
5146
5147
5148### removeDeviceData<sup>8+</sup>
5149
5150removeDeviceData(deviceId: string, callback: AsyncCallback&lt;void&gt;): void
5151
5152从当前数据库中删除指定设备的数据,使用callback异步回调。
5153> **说明:**
5154>
5155> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
5156> deviceId具体获取方式请参考[sync接口示例](#sync)。
5157
5158**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
5159
5160**参数:**
5161
5162| 参数名  | 类型 | 必填  | 说明                    |
5163| -----  | ------   | ----  | ----------------------- |
5164| deviceId  |string                       | 是    |标识要删除其数据的设备。  |
5165| callback  |AsyncCallback&lt;void&gt;    | 是    |回调函数。    |
5166
5167**示例:**
5168
5169```js
5170let kvStore;
5171const KEY_TEST_STRING_ELEMENT = 'key_test_string';
5172const VALUE_TEST_STRING_ELEMENT = 'value-string-001';
5173try {
5174    kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, async function (err,data) {
5175        console.log('RemoveDeviceData  put success');
5176        const deviceid = 'no_exist_device_id';
5177        kvStore.removeDeviceData(deviceid, async function (err,data) {
5178            if (err == undefined) {
5179                console.log('removeDeviceData success');
5180            } else {
5181                console.log('removeDeviceData fail');
5182                kvStore.get('localDeviceId', KEY_TEST_STRING_ELEMENT, async function (err,data) {
5183                    console.log('RemoveDeviceData get success');
5184                });
5185            }
5186        });
5187    });
5188}catch(e) {
5189    console.log('RemoveDeviceData e ' + e);
5190}
5191```
5192
5193
5194### removeDeviceData<sup>8+</sup>
5195
5196removeDeviceData(deviceId: string): Promise&lt;void&gt;
5197
5198从当前数据库中删除指定设备的数据,使用Promise异步回调。
5199> **说明:**
5200>
5201> 其中deviceId通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
5202> deviceId具体获取方式请参考[sync接口示例](#sync)。
5203
5204**系统能力:**  SystemCapability.DistributedDataManager.KVStore.DistributedKVStore
5205
5206**参数:**
5207
5208| 参数名  | 类型 | 必填  | 说明                    |
5209| -----  | ------   | ----  | ----------------------- |
5210| deviceId  |string  | 是    |标识要删除其数据的设备。  |
5211
5212**返回值:**
5213
5214| 类型    | 说明       |
5215| ------  | -------   |
5216|Promise&lt;void&gt; |无返回结果的Promise对象。|
5217
5218**示例:**
5219
5220```js
5221let kvStore;
5222const KEY_TEST_STRING_ELEMENT = 'key_test_string';
5223const VALUE_TEST_STRING_ELEMENT = 'value-string-001';
5224try {
5225    kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT).then((err) => {
5226        console.log('RemoveDeviceData put success');
5227    }).catch((err) => {
5228        console.log('RemoveDeviceData put fail ' + JSON.stringify(err));
5229    });
5230    const deviceid = 'no_exist_device_id';
5231    kvStore.removeDeviceData(deviceid).then((err) => {
5232        console.log('removeDeviceData success');
5233    }).catch((err) => {
5234        console.log('removeDeviceData fail ' + JSON.stringify(err));
5235    });
5236    kvStore.get('localDeviceId', KEY_TEST_STRING_ELEMENT).then((data) => {
5237        console.log('RemoveDeviceData get success data:' + data);
5238    }).catch((err) => {
5239        console.log('RemoveDeviceData get fail ' + JSON.stringify(err));
5240    });
5241}catch(e) {
5242    console.log('RemoveDeviceData e ' + e);
5243}
5244```
5245
5246
5247### sync<sup>8+</sup>
5248
5249sync(deviceIds: string[], mode: SyncMode, delayMs?: number): void
5250
5251在手动同步方式下,触发数据库同步。
5252
5253> **说明:**
5254>
5255> 其中deviceIds为<!--RP2-->[DeviceInfo](../apis-distributedservice-kit/js-apis-device-manager-sys.md#deviceinfo)中的networkId, 通过调用[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP2End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
5256
5257**需要权限**: ohos.permission.DISTRIBUTED_DATASYNC5258
5259**系统能力:**  SystemCapability.DistributedDataManager.KVStore.Core
5260
5261**参数:**
5262
5263| 参数名  | 类型 | 必填  | 说明                    |
5264| -----  | ------   | ----  | ----------------------- |
5265| deviceIds    |string[]               | 是    |需要同步DeviceKVStore数据库的设备networkId列表。 |
5266| mode            |[SyncMode](#syncmode)  | 是    |同步模式。  |
5267| delayMs  |number                 | 否    |可选参数,允许延时时间,单位:ms(毫秒),默认为0。  |
5268
5269**示例:**
5270
5271```js
5272import deviceManager from '@ohos.distributedHardware.deviceManager';
5273
5274let devManager;
5275let kvStore;
5276const KEY_TEST_SYNC_ELEMENT = 'key_test_sync';
5277const VALUE_TEST_SYNC_ELEMENT = 'value-string-001';
5278// create deviceManager
5279deviceManager.createDeviceManager('bundleName', (err, value) => {
5280  if (!err) {
5281    devManager = value;
5282    let deviceIds = [];
5283    if (devManager != null) {
5284      var devices = devManager.getTrustedDeviceListSync();
5285      for (var i = 0; i < devices.length; i++) {
5286        deviceIds[i] = devices[i].networkId;
5287      }
5288    }
5289    try {
5290      kvStore.on('syncComplete', function (data) {
5291        console.log('Sync dataChange');
5292      });
5293      kvStore.put(KEY_TEST_SYNC_ELEMENT + 'testSync101', VALUE_TEST_SYNC_ELEMENT, function (err, data) {
5294        if (err != undefined) {
5295          console.log("put err: " + JSON.stringify(err));
5296          return;
5297        }
5298        console.log('Succeeded in putting data');
5299        const mode = distributedData.SyncMode.PULL_ONLY;
5300        kvStore.sync(deviceIds, mode, 1000);
5301      });
5302    } catch (e) {
5303      console.log('Sync e' + e);
5304    }
5305  }
5306});
5307```
5308
5309### on('dataChange')<sup>8+</sup>
5310
5311on(event: 'dataChange', type: SubscribeType, listener: Callback&lt;ChangeNotification&gt;): void
5312
5313订阅指定类型的数据变更通知。
5314
5315**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
5316
5317**参数:**
5318
5319| 参数名   | 类型                                                      | 必填 | 说明                                                 |
5320| -------- | --------------------------------------------------------- | ---- | ---------------------------------------------------- |
5321| event    | string                                                    | 是   | 订阅的事件名,固定为'dataChange',表示数据变更事件。 |
5322| type     | [SubscribeType](#subscribetype)                           | 是   | 表示订阅的类型。                                     |
5323| listener | Callback&lt;[ChangeNotification](#changenotification)&gt; | 是   | 回调函数。                                           |
5324
5325**示例:**
5326
5327```js
5328let kvStore;
5329kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_LOCAL, function (data) {
5330    console.log("dataChange callback call data: " + JSON.stringify(data));
5331});
5332```
5333
5334### on('syncComplete')<sup>8+</sup>
5335
5336on(event: 'syncComplete', syncCallback: Callback&lt;Array&lt;[string, number]&gt;&gt;): void
5337
5338订阅同步完成事件回调通知。
5339
5340**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
5341
5342**参数:**
5343
5344| 参数名       | 类型                                          | 必填 | 说明                                                   |
5345| ------------ | --------------------------------------------- | ---- | ------------------------------------------------------ |
5346| event        | string                                        | 是   | 订阅的事件名,固定为'syncComplete',表示同步完成事件。 |
5347| syncCallback | Callback&lt;Array&lt;[string, number]&gt;&gt; | 是   | 回调函数。用于向调用方发送同步结果的回调。             |
5348
5349**示例:**
5350
5351```js
5352let kvStore;
5353const KEY_TEST_FLOAT_ELEMENT = 'key_test_float';
5354const VALUE_TEST_FLOAT_ELEMENT = 321.12;
5355try {
5356    kvStore.on('syncComplete', function (data) {
5357        console.log('syncComplete ' + data)
5358    });
5359    kvStore.put(KEY_TEST_FLOAT_ELEMENT, VALUE_TEST_FLOAT_ELEMENT).then((data) => {
5360        console.log('syncComplete put success');
5361    }).catch((error) => {
5362        console.log('syncComplete put fail ' + error);
5363    });
5364}catch(e) {
5365    console.log('syncComplete put e ' + e);
5366}
5367```
5368
5369### off('dataChange')<sup>8+</sup>
5370
5371off(event:'dataChange', listener?: Callback&lt;ChangeNotification&gt;): void
5372
5373取消订阅数据变更通知。
5374
5375**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
5376
5377**参数:**
5378
5379| 参数名   | 类型                                                      | 必填 | 说明                                                     |
5380| -------- | --------------------------------------------------------- | ---- | -------------------------------------------------------- |
5381| event    | string                                                    | 是   | 取消订阅的事件名,固定为'dataChange',表示数据变更事件。 |
5382| listener | Callback&lt;[ChangeNotification](#changenotification)&gt; | 否   | 取消订阅的函数。如不设置callback,则取消所有订阅的函数。 |
5383
5384**示例:**
5385
5386```js
5387let kvStore;
5388class KvstoreModel {
5389    call(data) {
5390        console.log("dataChange: " + data);
5391    }
5392    subscribeDataChange() {
5393        if (kvStore != null) {
5394            kvStore.on('dataChange', distributedData.SubscribeType.SUBSCRIBE_TYPE_REMOTE, this.call);
5395        }
5396    }
5397    unsubscribeDataChange() {
5398        if (kvStore != null) {
5399            kvStore.off('dataChange', this.call);
5400        }
5401    }
5402}
5403```
5404
5405### off('syncComplete')<sup>8+</sup>
5406
5407off(event: 'syncComplete', syncCallback?: Callback&lt;Array&lt;[string, number]&gt;&gt;): void
5408
5409取消订阅同步完成事件回调通知。
5410
5411**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
5412
5413**参数:**
5414
5415| 参数名       | 类型                                          | 必填 | 说明                                                       |
5416| ------------ | --------------------------------------------- | ---- | ---------------------------------------------------------- |
5417| event        | string                                        | 是   | 取消订阅的事件名,固定为'syncComplete',表示同步完成事件。 |
5418| syncCallback | Callback&lt;Array&lt;[string, number]&gt;&gt; | 否   | 取消订阅的函数。如不设置callback,则取消所有订阅的函数。  |
5419
5420**示例:**
5421
5422```js
5423let kvStore;
5424class KvstoreModel {
5425    call(data) {
5426        console.log("syncComplete: " + data);
5427    }
5428    subscribeSyncComplete() {
5429        if (kvStore != null) {
5430            kvStore.on('syncComplete', this.call);
5431        }
5432    }
5433    unsubscribeSyncComplete() {
5434        if (kvStore != null) {
5435            kvStore.off('syncComplete', this.call);
5436        }
5437    }
5438}
5439```
5440
5441## SyncMode
5442
5443同步模式枚举。
5444
5445**系统能力:** SystemCapability.DistributedDataManager.KVStore.Core
5446
5447| 名称       | 值     | 说明                    |
5448| -----      | ------    | ----------------------- |
5449| PULL_ONLY  |0          |表示只能从远端拉取数据到本端。 |
5450| PUSH_ONLY  |1          |表示只能从本端推送数据到远端。 |
5451| PUSH_PULL  |2          |表示从本端推送数据到远端,然后从远端拉取数据到本端。 |
5452