1# @ohos.data.rdb (关系型数据库)
2
3关系型数据库(Relational Database,RDB)是一种基于关系模型来管理数据的数据库。关系型数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查等接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需要。不支持Worker线程。
4
5该模块提供以下关系型数据库相关的常用功能:
6
7- [RdbPredicates](#rdbpredicates): 数据库中用来代表数据实体的性质、特征或者数据实体之间关系的词项,主要用来定义数据库的操作条件。
8- [RdbStore](#rdbstore):提供管理关系数据库(RDB)方法的接口。
9
10> **说明:**
11>
12> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
13>
14> - 从API version 9开始,该接口不再维护,推荐使用新接口[@ohos.data.relationalStore](js-apis-data-relationalStore.md)。
15
16
17## 导入模块
18
19```ts
20import data_rdb from '@ohos.data.rdb';
21```
22## data_rdb.getRdbStore
23
24getRdbStore(context: Context, config: StoreConfig, version: number, callback: AsyncCallback<RdbStore>): void
25
26获得一个相关的RdbStore,操作关系型数据库,用户可以根据自己的需求配置RdbStore的参数,然后通过RdbStore调用相关接口可以执行相关的数据操作,使用callback异步回调。
27
28**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
29
30**参数:**
31
32| 参数名   | 类型                                       | 必填 | 说明                                                         |
33| -------- | ------------------------------------------ | ---- | ------------------------------------------------------------ |
34| context  | Context                                    | 是   | 应用的上下文。 <br>FA模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。 |
35| config   | [StoreConfig](#storeconfig)                | 是   | 与此RDB存储相关的数据库配置。                                |
36| version  | number                                     | 是   | 数据库版本。<br>目前暂不支持通过version自动识别数据库升级降级操作,只能由开发者自行维护。                                                 |
37| callback | AsyncCallback&lt;[RdbStore](#rdbstore)&gt; | 是   | 指定callback回调函数,返回RdbStore对象。                     |
38
39**示例:**
40
41FA模型示例:
42
43```js
44import featureAbility from '@ohos.ability.featureAbility';
45import relationalStore from '@ohos.data.relationalStore';
46import window from '@ohos.window';
47import { BusinessError } from '@ohos.base';
48
49const STORE_CONFIG: data_rdb.StoreConfig = { name: "RdbTest.db"}
50data_rdb.getRdbStore(this.context, STORE_CONFIG, 1, (err, rdbStore) => {
51  if (err) {
52    console.info("Get RdbStore failed, err: " + err)
53    return
54  }
55  console.log("Get RdbStore successfully.")
56})
57```
58
59Stage模型示例:
60
61```ts
62import UIAbility from '@ohos.app.ability.UIAbility';
63import { BusinessError } from "@ohos.base";
64import window from '@ohos.window';
65
66const STORE_CONFIG: data_rdb.StoreConfig = { name: "RdbTest.db"}
67class EntryAbility extends UIAbility {
68  onWindowStageCreate(windowStage: window.WindowStage){
69    data_rdb.getRdbStore(this.context, STORE_CONFIG, 1, (err: BusinessError, rdbStore: data_rdb.RdbStore) => {
70      if (err) {
71        console.info("Get RdbStore failed, err: " + err)
72        return
73      }
74      console.log("Get RdbStore successfully.")
75    })
76  }
77}
78```
79
80## data_rdb.getRdbStore
81
82getRdbStore(context: Context, config: StoreConfig, version: number): Promise&lt;RdbStore&gt;
83
84获得一个相关的RdbStore,操作关系型数据库,用户可以根据自己的需求配置RdbStore的参数,然后通过RdbStore调用相关接口可以执行相关的数据操作,使用Promise异步回调。
85
86**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
87
88**参数:**
89
90| 参数名  | 类型                        | 必填 | 说明                                                         |
91| ------- | --------------------------- | ---- | ------------------------------------------------------------ |
92| context | Context                     | 是   | 应用的上下文。 <br>FA模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。 |
93| config  | [StoreConfig](#storeconfig) | 是   | 与此RDB存储相关的数据库配置。                                |
94| version | number                      | 是   | 数据库版本。<br>目前暂不支持通过version自动识别数据库升级降级操作,只能由开发者自行维护。                                                 |
95
96**返回值**:
97
98| 类型                                 | 说明                            |
99| ------------------------------------ | ------------------------------- |
100| Promise&lt;[RdbStore](#rdbstore)&gt; | Promise对象。返回RdbStore对象。 |
101
102**示例:**
103
104FA模型示例:
105
106```js
107import featureAbility from '@ohos.ability.featureAbility';
108
109const STORE_CONFIG: data_rdb.StoreConfig = { name: "RdbTest.db"}
110let promise = data_rdb.getRdbStore(this.context, STORE_CONFIG, 1);
111promise.then(async (rdbStore) => {
112  console.log("Get RdbStore successfully.")
113}).catch((err: BusinessError) => {
114  console.log("Get RdbStore failed, err: " + err)
115})
116```
117
118Stage模型示例:
119
120```ts
121import UIAbility from '@ohos.app.ability.UIAbility';
122import { BusinessError } from "@ohos.base";
123import window from '@ohos.window';
124
125const STORE_CONFIG: data_rdb.StoreConfig = { name: "RdbTest.db"}
126class EntryAbility extends UIAbility {
127  onWindowStageCreate(windowStage: window.WindowStage){
128    context = this.context
129  }
130}
131
132// 获取context后调用getRdbStore
133let promise = data_rdb.getRdbStore(this.context, STORE_CONFIG, 1);
134promise.then(async (rdbStore: data_rdb.RdbStore) => {
135  console.log("Get RdbStore successfully.")
136}).catch((err: BusinessError) => {
137  console.log("Get RdbStore failed, err: " + err)
138})
139```
140
141## data_rdb.deleteRdbStore
142
143deleteRdbStore(context: Context, name: string, callback: AsyncCallback&lt;void&gt;): void
144
145删除数据库,使用callback异步回调。
146
147**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
148
149**参数:**
150
151| 参数名   | 类型                      | 必填 | 说明                                                         |
152| -------- | ------------------------- | ---- | ------------------------------------------------------------ |
153| context  | Context                   | 是   | 应用的上下文。 <br>FA模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。 |
154| name     | string                    | 是   | 数据库名称。                                                 |
155| callback | AsyncCallback&lt;void&gt; | 是   | 指定callback回调函数。                                       |
156
157**示例:**
158
159FA模型示例:
160
161```js
162import featureAbility from '@ohos.ability.featureAbility';
163
164data_rdb.deleteRdbStore(this.context, "RdbTest.db", (err) => {
165  if (err) {
166    console.info("Delete RdbStore failed, err: " + err)
167    return
168  }
169  console.log("Delete RdbStore successfully.")
170})
171```
172
173Stage模型示例:
174
175```ts
176import UIAbility from '@ohos.app.ability.UIAbility';
177import window from '@ohos.window';
178
179class EntryAbility extends UIAbility {
180  onWindowStageCreate(windowStage: window.WindowStage){
181    context = this.context
182  }
183}
184
185// 获取context后调用deleteRdbStore
186data_rdb.deleteRdbStore(this.context, "RdbTest.db", (err) => {
187  if (err) {
188    console.info("Delete RdbStore failed, err: " + err)
189    return
190  }
191  console.log("Delete RdbStore successfully.")
192})
193```
194
195## data_rdb.deleteRdbStore
196
197deleteRdbStore(context: Context, name: string): Promise&lt;void&gt;
198
199使用指定的数据库文件配置删除数据库,使用Promise异步回调。
200
201**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
202
203**参数**
204
205| 参数名  | 类型    | 必填 | 说明                                                         |
206| ------- | ------- | ---- | ------------------------------------------------------------ |
207| context | Context | 是   | 应用的上下文。 <br>FA模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](../apis-ability-kit/js-apis-inner-app-context.md)。 |
208| name    | string  | 是   | 数据库名称。                                                 |
209
210**返回值**:
211
212| 类型                | 说明                      |
213| ------------------- | ------------------------- |
214| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
215
216**示例:**
217
218FA模型示例:
219
220```js
221import featureAbility from '@ohos.ability.featureAbility';
222
223let promise = data_rdb.deleteRdbStore(this.context, "RdbTest.db")
224promise.then(() => {
225  console.log("Delete RdbStore successfully.")
226}).catch((err: BusinessError) => {
227  console.info("Delete RdbStore failed, err: " + err)
228})
229```
230
231Stage模型示例:
232
233```ts
234import UIAbility from '@ohos.app.ability.UIAbility';
235import { BusinessError } from "@ohos.base";
236import window from '@ohos.window';
237
238class EntryAbility extends UIAbility {
239  onWindowStageCreate(windowStage: window.WindowStage){
240    context = this.context
241  }
242}
243
244// 获取context后调用deleteRdbStore
245let promise = data_rdb.deleteRdbStore(this.context, "RdbTest.db")
246promise.then(()=>{
247  console.log("Delete RdbStore successfully.")
248}).catch((err: BusinessError) => {
249  console.info("Delete RdbStore failed, err: " + err)
250})
251```
252
253## ValueType
254
255type ValueType = number | string | boolean
256
257用于表示允许的数据字段类型。
258
259**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
260
261| 类型    | 说明                 |
262| ------- | -------------------- |
263| number  | 表示值类型为数字。   |
264| string  | 表示值类型为字符。   |
265| boolean | 表示值类型为布尔值。 |
266
267
268## ValuesBucket
269
270type ValuesBucket = { [key: string]: ValueType | Uint8Array | null }
271
272用于存储键值对的类型。
273
274**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
275
276| 键类型 | 值类型                                                      |
277| ------ | ----------------------------------------------------------- |
278| string | [ValueType](#valuetype)\|&nbsp;Uint8Array&nbsp;\|&nbsp;null |
279
280## SyncMode<sup>8+</sup>
281
282指数据库同步模式。
283
284**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
285
286| 名称           | 值   | 说明                               |
287| -------------- | ---- | ---------------------------------- |
288| SYNC_MODE_PUSH | 0    | 表示数据从本地设备推送到远程设备。 |
289| SYNC_MODE_PULL | 1    | 表示数据从远程设备拉至本地设备。   |
290
291## SubscribeType<sup>8+</sup>
292
293描述订阅类型。
294
295**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC
296
297**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
298
299| 名称                  | 值   | 说明               |
300| --------------------- | ---- | ------------------ |
301| SUBSCRIBE_TYPE_REMOTE | 0    | 订阅远程数据更改。 |
302
303## StoreConfig
304
305管理关系数据库配置。
306
307**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
308
309| 名称 | 类型 | 必填 | 说明 |
310| -------- | -------- | -------- | -------- |
311| name | string | 是 | 数据库文件名。 |
312
313## RdbPredicates
314
315表示关系型数据库(RDB)的谓词。该类确定RDB中条件表达式的值是true还是false。
316
317### constructor
318
319constructor(name: string)
320
321构造函数。
322
323**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
324
325**参数:**
326
327| 参数名 | 类型 | 必填 | 说明 |
328| -------- | -------- | -------- | -------- |
329| name | string | 是 | 数据库表名。 |
330
331**示例:**
332
333```ts
334let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
335```
336
337### inDevices<sup>8+</sup>
338
339inDevices(devices: Array&lt;string&gt;): RdbPredicates
340
341同步分布式数据库时连接到组网内指定的远程设备。
342
343> **说明:**
344>
345> 其中devices通过调用<!--RP2-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP2End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
346
347**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
348
349**参数:**
350
351| 参数名 | 类型 | 必填 | 说明 |
352| -------- | -------- | -------- | -------- |
353| devices | Array&lt;string&gt; | 是 | 指定的组网内的远程设备ID。 |
354
355**返回值**:
356
357| 类型 | 说明 |
358| -------- | -------- |
359| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
360
361**示例:**
362
363```ts
364import deviceManager from '@ohos.distributedHardware.deviceManager';
365
366let dmInstance: deviceManager.DeviceManager;
367let deviceIds: Array<string> = [];
368let devices: Array<string> = [];
369
370deviceManager.createDeviceManager("com.example.appdatamgrverify", (err: BusinessError, manager: void) => {
371  if (err) {
372    console.log("create device manager failed, err=" + err);
373    return;
374  }
375  dmInstance = manager;
376  devices = dmInstance.getTrustedDeviceListSync();
377  for (let i = 0; i < devices.length; i++) {
378    deviceIds[i] = devices[i].deviceId;
379  }
380})
381
382let predicates = new data_rdb.RdbPredicates("EMPLOYEE");
383predicates.inDevices(deviceIds);
384
385let predicates = new data_rdb.RdbPredicates("EMPLOYEE");
386predicates.inDevices(deviceIds);
387```
388
389### inAllDevices<sup>8+</sup>
390
391inAllDevices(): RdbPredicates
392
393同步分布式数据库时连接到组网内所有的远程设备。
394
395**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
396
397**返回值**:
398
399| 类型 | 说明 |
400| -------- | -------- |
401| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
402
403**示例:**
404
405```ts
406let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
407predicates.inAllDevices()
408```
409
410### equalTo
411
412equalTo(field: string, value: ValueType): RdbPredicates
413
414配置谓词以匹配数据字段为ValueType且值等于指定值的字段。
415
416**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
417
418**参数:**
419
420| 参数名 | 类型 | 必填 | 说明 |
421| -------- | -------- | -------- | -------- |
422| field | string | 是 | 数据库表中的列名。 |
423| value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 |
424
425**返回值**:
426
427| 类型 | 说明 |
428| -------- | -------- |
429| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
430
431**示例:**
432
433```ts
434let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
435predicates.equalTo("NAME", "lisi")
436```
437
438
439### notEqualTo
440
441notEqualTo(field: string, value: ValueType): RdbPredicates
442
443配置谓词以匹配数据字段为ValueType且值不等于指定值的字段。
444
445**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
446
447**参数:**
448
449| 参数名 | 类型 | 必填 | 说明 |
450| -------- | -------- | -------- | -------- |
451| field | string | 是 | 数据库表中的列名。 |
452| value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 |
453
454**返回值**:
455
456| 类型 | 说明 |
457| -------- | -------- |
458| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
459
460**示例:**
461
462```ts
463let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
464predicates.notEqualTo("NAME", "lisi")
465```
466
467
468### beginWrap
469
470beginWrap(): RdbPredicates
471
472向谓词添加左括号。
473
474**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
475
476**返回值**:
477
478| 类型 | 说明 |
479| -------- | -------- |
480| [RdbPredicates](#rdbpredicates) | 返回带有左括号的Rdb谓词。 |
481
482**示例:**
483
484```ts
485let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
486predicates.equalTo("NAME", "lisi")
487    .beginWrap()
488    .equalTo("AGE", 18)
489    .or()
490    .equalTo("SALARY", 200.5)
491    .endWrap()
492```
493
494### endWrap
495
496endWrap(): RdbPredicates
497
498向谓词添加右括号。
499
500**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
501
502**返回值**:
503
504| 类型 | 说明 |
505| -------- | -------- |
506| [RdbPredicates](#rdbpredicates) | 返回带有右括号的Rdb谓词。 |
507
508**示例:**
509
510```ts
511let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
512predicates.equalTo("NAME", "lisi")
513    .beginWrap()
514    .equalTo("AGE", 18)
515    .or()
516    .equalTo("SALARY", 200.5)
517    .endWrap()
518```
519
520### or
521
522or(): RdbPredicates
523
524将或条件添加到谓词中。
525
526**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
527
528**返回值**:
529
530| 类型 | 说明 |
531| -------- | -------- |
532| [RdbPredicates](#rdbpredicates) | 返回带有或条件的Rdb谓词。 |
533
534**示例:**
535
536```ts
537let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
538predicates.equalTo("NAME", "Lisa")
539    .or()
540    .equalTo("NAME", "Rose")
541```
542
543### and
544
545and(): RdbPredicates
546
547向谓词添加和条件。
548
549**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
550
551**返回值**:
552
553| 类型 | 说明 |
554| -------- | -------- |
555| [RdbPredicates](#rdbpredicates) | 返回带有和条件的Rdb谓词。 |
556
557**示例:**
558
559```ts
560let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
561predicates.equalTo("NAME", "Lisa")
562    .and()
563    .equalTo("SALARY", 200.5)
564```
565
566### contains
567
568contains(field: string, value: string): RdbPredicates
569
570配置谓词以匹配数据字段为string且value包含指定值的字段。
571
572**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
573
574**参数:**
575
576| 参数名 | 类型 | 必填 | 说明 |
577| -------- | -------- | -------- | -------- |
578| field | string | 是 | 数据库表中的列名。 |
579| value | string | 是 | 指示要与谓词匹配的值。 |
580
581**返回值**:
582
583| 类型 | 说明 |
584| -------- | -------- |
585| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
586
587**示例:**
588
589```ts
590let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
591predicates.contains("NAME", "os")
592```
593
594### beginsWith
595
596beginsWith(field: string, value: string): RdbPredicates
597
598配置谓词以匹配数据字段为string且值以指定字符串开头的字段。
599
600**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
601
602**参数:**
603
604| 参数名 | 类型 | 必填 | 说明 |
605| -------- | -------- | -------- | -------- |
606| field | string | 是 | 数据库表中的列名。 |
607| value | string | 是 | 指示要与谓词匹配的值。 |
608
609**返回值**:
610
611| 类型 | 说明 |
612| -------- | -------- |
613| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
614
615**示例:**
616
617```ts
618let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
619predicates.beginsWith("NAME", "os")
620```
621
622### endsWith
623
624endsWith(field: string, value: string): RdbPredicates
625
626配置谓词以匹配数据字段为string且值以指定字符串结尾的字段。
627
628**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
629
630**参数:**
631
632| 参数名 | 类型 | 必填 | 说明 |
633| -------- | -------- | -------- | -------- |
634| field | string | 是 | 数据库表中的列名。 |
635| value | string | 是 | 指示要与谓词匹配的值。 |
636
637**返回值**:
638
639| 类型 | 说明 |
640| -------- | -------- |
641| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
642
643**示例:**
644
645```ts
646let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
647predicates.endsWith("NAME", "se")
648```
649
650### isNull
651
652isNull(field: string): RdbPredicates
653
654配置谓词以匹配值为null的字段。
655
656**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
657
658**参数:**
659
660| 参数名 | 类型 | 必填 | 说明 |
661| -------- | -------- | -------- | -------- |
662| field | string | 是 | 数据库表中的列名。 |
663
664**返回值**:
665
666| 类型 | 说明 |
667| -------- | -------- |
668| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
669
670**示例**:
671```ts
672let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
673predicates.isNull("NAME")
674```
675
676### isNotNull
677
678isNotNull(field: string): RdbPredicates
679
680配置谓词以匹配值不为null的指定字段。
681
682**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
683
684**参数:**
685
686| 参数名 | 类型 | 必填 | 说明 |
687| -------- | -------- | -------- | -------- |
688| field | string | 是 | 数据库表中的列名。 |
689
690**返回值**:
691
692| 类型 | 说明 |
693| -------- | -------- |
694| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
695
696**错误码:**
697
698以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
699
700| **错误码ID** | **错误信息**                                                                                                       |
701| --------- |----------------------------------------------------------------------------------------------------------------|
702| 401       | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified;  2. Incorrect parameter types. |
703
704**示例:**
705
706```ts
707let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
708predicates.isNotNull("NAME")
709```
710
711### like
712
713like(field: string, value: string): RdbPredicates
714
715配置谓词以匹配数据字段为string且值类似于指定字符串的字段。
716
717**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
718
719**参数:**
720
721| 参数名 | 类型 | 必填 | 说明 |
722| -------- | -------- | -------- | -------- |
723| field | string | 是 | 数据库表中的列名。 |
724| value | string | 是 | 指示要与谓词匹配的值。 |
725
726**返回值**:
727
728| 类型 | 说明 |
729| -------- | -------- |
730| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
731
732**示例:**
733
734```ts
735let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
736predicates.like("NAME", "%os%")
737```
738
739### glob
740
741glob(field: string, value: string): RdbPredicates
742
743配置RdbPredicates匹配数据字段为string的指定字段。
744
745**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
746
747**参数:**
748
749| 参数名 | 类型 | 必填 | 说明 |
750| -------- | -------- | -------- | -------- |
751| field | string | 是 | 数据库表中的列名。 |
752| value | string | 是 | 指示要与谓词匹配的值。<br>支持通配符,*表示0个、1个或多个数字或字符,?表示1个数字或字符。 |
753
754**返回值**:
755
756| 类型 | 说明 |
757| -------- | -------- |
758| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
759
760**示例:**
761
762```ts
763let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
764predicates.glob("NAME", "?h*g")
765```
766
767### between
768
769between(field: string, low: ValueType, high: ValueType): RdbPredicates
770
771将谓词配置为匹配数据字段为ValueType且value在给定范围内的指定字段。
772
773**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
774
775**参数:**
776
777| 参数名 | 类型 | 必填 | 说明 |
778| -------- | -------- | -------- | -------- |
779| field | string | 是 | 数据库表中的列名。 |
780| low | [ValueType](#valuetype) | 是 | 指示与谓词匹配的最小值。 |
781| high | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的最大值。 |
782
783**返回值**:
784
785| 类型 | 说明 |
786| -------- | -------- |
787| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
788
789**示例:**
790
791```ts
792let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
793predicates.between("AGE", 10, 50)
794```
795
796### notBetween
797
798notBetween(field: string, low: ValueType, high: ValueType): RdbPredicates
799
800配置RdbPredicates以匹配数据字段为ValueType且value超出给定范围的指定字段。
801
802**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
803
804**参数:**
805
806| 参数名 | 类型 | 必填 | 说明 |
807| -------- | -------- | -------- | -------- |
808| field | string | 是 | 数据库表中的列名。 |
809| low | [ValueType](#valuetype) | 是 | 指示与谓词匹配的最小值。 |
810| high | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的最大值。 |
811
812**返回值**:
813
814| 类型 | 说明 |
815| -------- | -------- |
816| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
817
818**示例:**
819
820```ts
821let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
822predicates.notBetween("AGE", 10, 50)
823```
824
825### greaterThan
826
827greaterThan(field: string, value: ValueType): RdbPredicates
828
829配置谓词以匹配数据字段为ValueType且值大于指定值的字段。
830
831**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
832
833**参数:**
834
835| 参数名 | 类型 | 必填 | 说明 |
836| -------- | -------- | -------- | -------- |
837| field | string | 是 | 数据库表中的列名。 |
838| value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 |
839
840**返回值**:
841
842| 类型 | 说明 |
843| -------- | -------- |
844| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
845
846**示例:**
847
848```ts
849let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
850predicates.greaterThan("AGE", 18)
851```
852
853### lessThan
854
855lessThan(field: string, value: ValueType): RdbPredicates
856
857配置谓词以匹配数据字段为valueType且value小于指定值的字段。
858
859**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
860
861**参数:**
862
863| 参数名 | 类型 | 必填 | 说明 |
864| -------- | -------- | -------- | -------- |
865| field | string | 是 | 数据库表中的列名。 |
866| value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 |
867
868**返回值**:
869
870| 类型 | 说明 |
871| -------- | -------- |
872| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
873
874**示例:**
875
876```ts
877let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
878predicates.lessThan("AGE", 20)
879```
880
881### greaterThanOrEqualTo
882
883greaterThanOrEqualTo(field: string, value: ValueType): RdbPredicates
884
885配置谓词以匹配数据字段为ValueType且value大于或等于指定值的字段。
886
887**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
888
889**参数:**
890
891| 参数名 | 类型 | 必填 | 说明 |
892| -------- | -------- | -------- | -------- |
893| field | string | 是 | 数据库表中的列名。 |
894| value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 |
895
896**返回值**:
897
898| 类型 | 说明 |
899| -------- | -------- |
900| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
901
902**示例:**
903
904```ts
905let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
906predicates.greaterThanOrEqualTo("AGE", 18)
907```
908
909### lessThanOrEqualTo
910
911lessThanOrEqualTo(field: string, value: ValueType): RdbPredicates
912
913配置谓词以匹配数据字段为ValueType且value小于或等于指定值的字段。
914
915**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
916
917**参数:**
918
919| 参数名 | 类型 | 必填 | 说明 |
920| -------- | -------- | -------- | -------- |
921| field | string | 是 | 数据库表中的列名。 |
922| value | [ValueType](#valuetype) | 是 | 指示要与谓词匹配的值。 |
923
924**返回值**:
925
926| 类型 | 说明 |
927| -------- | -------- |
928| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
929
930**示例:**
931
932```ts
933let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
934predicates.lessThanOrEqualTo("AGE", 20)
935```
936
937### orderByAsc
938
939orderByAsc(field: string): RdbPredicates
940
941配置谓词以匹配其值按升序排序的列。
942
943**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
944
945**参数:**
946
947| 参数名 | 类型 | 必填 | 说明 |
948| -------- | -------- | -------- | -------- |
949| field | string | 是 | 数据库表中的列名。 |
950
951**返回值**:
952
953| 类型 | 说明 |
954| -------- | -------- |
955| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
956
957**示例:**
958
959```ts
960let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
961predicates.orderByAsc("NAME")
962```
963
964### orderByDesc
965
966orderByDesc(field: string): RdbPredicates
967
968配置谓词以匹配其值按降序排序的列。
969
970**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
971
972**参数:**
973
974| 参数名 | 类型 | 必填 | 说明 |
975| -------- | -------- | -------- | -------- |
976| field | string | 是 | 数据库表中的列名。 |
977
978**返回值**:
979
980| 类型 | 说明 |
981| -------- | -------- |
982| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
983
984**示例:**
985
986```ts
987let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
988predicates.orderByDesc("AGE")
989```
990
991### distinct
992
993distinct(): RdbPredicates
994
995配置谓词以过滤重复记录并仅保留其中一个。
996
997**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
998
999**返回值**:
1000
1001| 类型 | 说明 |
1002| -------- | -------- |
1003| [RdbPredicates](#rdbpredicates) | 返回可用于过滤重复记录的谓词。 |
1004
1005**示例:**
1006
1007```ts
1008let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1009predicates.equalTo("NAME", "Rose").distinct()
1010```
1011
1012### limitAs
1013
1014limitAs(value: number): RdbPredicates
1015
1016设置最大数据记录数的谓词。
1017
1018**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1019
1020**参数:**
1021
1022| 参数名 | 类型 | 必填 | 说明 |
1023| -------- | -------- | -------- | -------- |
1024| value | number | 是 | 最大数据记录数。 |
1025
1026**返回值**:
1027
1028| 类型 | 说明 |
1029| -------- | -------- |
1030| [RdbPredicates](#rdbpredicates) | 返回可用于设置最大数据记录数的谓词。 |
1031
1032**示例:**
1033
1034```ts
1035let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1036predicates.equalTo("NAME", "Rose").limitAs(3)
1037```
1038
1039### offsetAs
1040
1041offsetAs(rowOffset: number): RdbPredicates
1042
1043配置RdbPredicates以指定返回结果的起始位置。
1044
1045**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1046
1047**参数:**
1048
1049| 参数名 | 类型 | 必填 | 说明 |
1050| -------- | -------- | -------- | -------- |
1051| rowOffset | number | 是 | 返回结果的起始位置,取值为正整数。 |
1052
1053**返回值**:
1054
1055| 类型 | 说明 |
1056| -------- | -------- |
1057| [RdbPredicates](#rdbpredicates) | 返回具有指定返回结果起始位置的谓词。 |
1058
1059**示例:**
1060
1061```ts
1062let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1063predicates.equalTo("NAME", "Rose").offsetAs(3)
1064```
1065
1066### groupBy
1067
1068groupBy(fields: Array&lt;string&gt;): RdbPredicates
1069
1070配置RdbPredicates按指定列分组查询结果。
1071
1072**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1073
1074**参数:**
1075
1076| 参数名 | 类型 | 必填 | 说明 |
1077| -------- | -------- | -------- | -------- |
1078| fields | Array&lt;string&gt; | 是 | 指定分组依赖的列名。 |
1079
1080**返回值**:
1081
1082| 类型 | 说明 |
1083| -------- | -------- |
1084| [RdbPredicates](#rdbpredicates) | 返回分组查询列的谓词。 |
1085
1086**示例:**
1087
1088```ts
1089let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1090predicates.groupBy(["AGE", "NAME"])
1091```
1092
1093### indexedBy
1094
1095indexedBy(field: string): RdbPredicates
1096
1097配置RdbPredicates以指定索引列。
1098
1099**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1100
1101**参数:**
1102
1103| 参数名 | 类型 | 必填 | 说明 |
1104| -------- | -------- | -------- | -------- |
1105| field | string | 是 | 索引列的名称。 |
1106
1107**返回值**:
1108
1109
1110| 类型 | 说明 |
1111| -------- | -------- |
1112| [RdbPredicates](#rdbpredicates) | 返回具有指定索引列的RdbPredicates。 |
1113
1114**示例:**
1115
1116```ts
1117let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1118predicates.indexedBy("SALARY_INDEX")
1119```
1120
1121### in
1122
1123in(field: string, value: Array&lt;ValueType&gt;): RdbPredicates
1124
1125配置RdbPredicates以匹配数据字段为ValueType数组且值在给定范围内的指定字段。
1126
1127**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1128
1129**参数:**
1130
1131| 参数名 | 类型 | 必填 | 说明 |
1132| -------- | -------- | -------- | -------- |
1133| field | string | 是 | 数据库表中的列名。 |
1134| value | Array&lt;[ValueType](#valuetype)&gt; | 是 | 以ValueType型数组形式指定的要匹配的值。 |
1135
1136**返回值**:
1137
1138| 类型 | 说明 |
1139| -------- | -------- |
1140| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
1141
1142**示例:**
1143
1144```ts
1145let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1146predicates.in("AGE", [18, 20])
1147```
1148
1149### notIn
1150
1151notIn(field: string, value: Array&lt;ValueType&gt;): RdbPredicates
1152
1153将RdbPredicates配置为匹配数据字段为ValueType且值超出给定范围的指定字段。
1154
1155**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1156
1157**参数:**
1158
1159| 参数名 | 类型 | 必填 | 说明 |
1160| -------- | -------- | -------- | -------- |
1161| field | string | 是 | 数据库表中的列名。 |
1162| value | Array&lt;[ValueType](#valuetype)&gt; | 是 | 以ValueType数组形式指定的要匹配的值。 |
1163
1164**返回值**:
1165
1166| 类型 | 说明 |
1167| -------- | -------- |
1168| [RdbPredicates](#rdbpredicates) | 返回与指定字段匹配的谓词。 |
1169
1170**示例:**
1171
1172```ts
1173let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1174predicates.notIn("NAME", ["Lisa", "Rose"])
1175```
1176
1177## RdbStore
1178
1179提供管理关系数据库(RDB)方法的接口。
1180
1181在使用以下相关接口前,请使用[executeSql](#executesql8)接口初始化数据库表结构和相关数据。
1182
1183### insert
1184
1185insert(table: string, values: ValuesBucket, callback: AsyncCallback&lt;number&gt;):void
1186
1187向目标表中插入一行数据,使用callback异步回调。
1188
1189**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1190
1191**参数:**
1192
1193| 参数名 | 类型 | 必填 | 说明 |
1194| -------- | -------- | -------- | -------- |
1195| table | string | 是 | 指定的目标表名。 |
1196| values | [ValuesBucket](#valuesbucket) | 是 | 表示要插入到表中的数据行。 |
1197| callback | AsyncCallback&lt;number&gt; | 是 | 指定callback回调函数。如果操作成功,返回行ID;否则返回-1。 |
1198
1199**示例:**
1200
1201```ts
1202import { ValuesBucket } from '@ohos.data.ValuesBucket';
1203
1204let key1 = "NAME";
1205let key2 = "AGE";
1206let key3 = "SALARY";
1207let key4 = "CODES";
1208let value1 = "Lisi";
1209let value2 = 18;
1210let value3 = 100.5;
1211let value4 = new Uint8Array([1, 2, 3, 4, 5]);
1212const valueBucket: ValuesBucket = {
1213  key1: value1,
1214  key2: value2,
1215  key3: value3,
1216  key4: value4,
1217};
1218
1219rdbStore.insert("EMPLOYEE", valueBucket, (status: number, rowId: number) => {
1220  if (status) {
1221    console.log("Insert is failed");
1222    return;
1223  }
1224  console.log("Insert is successful, rowId = " + rowId);
1225})
1226```
1227
1228### insert
1229
1230insert(table: string, values: ValuesBucket):Promise&lt;number&gt;
1231
1232向目标表中插入一行数据,使用Promise异步回调。
1233
1234**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1235
1236**参数:**
1237
1238| 参数名 | 类型 | 必填 | 说明 |
1239| -------- | -------- | -------- | -------- |
1240| table | string | 是 | 指定的目标表名。 |
1241| values | [ValuesBucket](#valuesbucket) | 是 | 表示要插入到表中的数据行。 |
1242
1243**返回值**:
1244
1245| 类型 | 说明 |
1246| -------- | -------- |
1247| Promise&lt;number&gt; | Promise对象。如果操作成功,返回行ID;否则返回-1。 |
1248
1249**示例:**
1250
1251```ts
1252import { ValuesBucket } from '@ohos.data.ValuesBucket';
1253
1254let key1 = "NAME";
1255let key2 = "AGE";
1256let key3 = "SALARY";
1257let key4 = "CODES";
1258let value1 = "Lisi";
1259let value2 = 18;
1260let value3 = 100.5;
1261let value4 = new Uint8Array([1, 2, 3, 4, 5]);
1262const valueBucket: ValuesBucket = {
1263  key1: value1,
1264  key2: value2,
1265  key3: value3,
1266  key4: value4,
1267};
1268
1269let promise: void = rdbStore.insert("EMPLOYEE", valueBucket)
1270promise.then((rowId: BusinessError) => {
1271  console.log("Insert is successful, rowId = " + rowId);
1272}).catch((status: number) => {
1273  console.log("Insert is failed");
1274})
1275```
1276
1277### batchInsert
1278
1279batchInsert(table: string, values: Array&lt;ValuesBucket&gt;, callback: AsyncCallback&lt;number&gt;):void
1280
1281向目标表中插入一组数据,使用callback异步回调。
1282
1283**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1284
1285**参数:**
1286
1287| 参数名 | 类型 | 必填 | 说明 |
1288| -------- | -------- | -------- | -------- |
1289| table | string | 是 | 指定的目标表名。 |
1290| values | Array&lt;[ValuesBucket](#valuesbucket)&gt; | 是 | 表示要插入到表中的一组数据。 |
1291| callback | AsyncCallback&lt;number&gt; | 是 | 指定callback回调函数。如果操作成功,返回插入的数据个数,否则返回-1。 |
1292
1293**示例:**
1294
1295```ts
1296import { ValuesBucket } from '@ohos.data.ValuesBucket';
1297
1298let key1 = "NAME";
1299let key2 = "AGE";
1300let key3 = "SALARY";
1301let key4 = "CODES";
1302let value1 = "Lisa";
1303let value2 = 18;
1304let value3 = 100.5;
1305let value4 = new Uint8Array([1, 2, 3, 4, 5]);
1306let value5 = "Jack";
1307let value6 = 19;
1308let value7 = 101.5;
1309let value8 = new Uint8Array([6, 7, 8, 9, 10]);
1310let value9 = "Tom";
1311let value10 = 20;
1312let value11 = 102.5;
1313let value12 = new Uint8Array([11, 12, 13, 14, 15]);
1314const valueBucket1: ValuesBucket = {
1315  key1: value1,
1316  key2: value2,
1317  key3: value3,
1318  key4: value4,
1319};
1320const valueBucket2: ValuesBucket = {
1321  key1: value5,
1322  key2: value6,
1323  key3: value7,
1324  key4: value8,
1325};
1326const valueBucket3: ValuesBucket = {
1327  key1: value9,
1328  key2: value10,
1329  key3: value11,
1330  key4: value12,
1331};
1332
1333let valueBuckets = new Array(valueBucket1, valueBucket2, valueBucket3);
1334rdbStore.batchInsert("EMPLOYEE", valueBuckets, (status: number, insertNum: number) => {
1335  if (status) {
1336    console.log("batchInsert is failed, status = " + status);
1337    return;
1338  }
1339  console.log("batchInsert is successful, the number of values that were inserted = " + insertNum);
1340})
1341```
1342
1343### batchInsert
1344
1345batchInsert(table: string, values: Array&lt;ValuesBucket&gt;):Promise&lt;number&gt;
1346
1347向目标表中插入一组数据,使用Promise异步回调。
1348
1349**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1350
1351**参数:**
1352
1353| 参数名 | 类型 | 必填 | 说明 |
1354| -------- | -------- | -------- | -------- |
1355| table | string | 是 | 指定的目标表名。 |
1356| values | Array&lt;[ValuesBucket](#valuesbucket)&gt; | 是 | 表示要插入到表中的一组数据。 |
1357
1358**返回值**:
1359
1360| 类型 | 说明 |
1361| -------- | -------- |
1362| Promise&lt;number&gt; | Promise对象。如果操作成功,返回插入的数据个数,否则返回-1。 |
1363
1364**示例:**
1365
1366```ts
1367import { ValuesBucket } from '@ohos.data.ValuesBucket';
1368
1369let key1 = "NAME";
1370let key2 = "AGE";
1371let key3 = "SALARY";
1372let key4 = "CODES";
1373let value1 = "Lisa";
1374let value2 = 18;
1375let value3 = 100.5;
1376let value4 = new Uint8Array([1, 2, 3, 4, 5]);
1377let value5 = "Jack";
1378let value6 = 19;
1379let value7 = 101.5;
1380let value8 = new Uint8Array([6, 7, 8, 9, 10]);
1381let value9 = "Tom";
1382let value10 = 20;
1383let value11 = 102.5;
1384let value12 = new Uint8Array([11, 12, 13, 14, 15]);
1385const valueBucket1: ValuesBucket = {
1386  key1: value1,
1387  key2: value2,
1388  key3: value3,
1389  key4: value4,
1390};
1391const valueBucket2: ValuesBucket = {
1392  key1: value5,
1393  key2: value6,
1394  key3: value7,
1395  key4: value8,
1396};
1397const valueBucket3: ValuesBucket = {
1398  key1: value9,
1399  key2: value10,
1400  key3: value11,
1401  key4: value12,
1402};
1403
1404let valueBuckets = new Array(valueBucket1, valueBucket2, valueBucket3);
1405let promise: void = rdbStore.batchInsert("EMPLOYEE", valueBuckets);
1406promise.then((insertNum: number) => {
1407  console.log("batchInsert is successful, the number of values that were inserted = " + insertNum);
1408}).catch((status: number) => {
1409  console.log("batchInsert is failed, status = " + status);
1410})
1411```
1412
1413### update
1414
1415update(values: ValuesBucket, predicates: RdbPredicates, callback: AsyncCallback&lt;number&gt;):void
1416
1417根据RdbPredicates的指定实例对象更新数据库中的数据,使用callback异步回调。
1418
1419**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1420
1421**参数:**
1422
1423| 参数名 | 类型 | 必填 | 说明 |
1424| -------- | -------- | -------- | -------- |
1425| values | [ValuesBucket](#valuesbucket) | 是 | values指示数据库中要更新的数据行。键值对与数据库表的列名相关联。 |
1426| predicates | [RdbPredicates](#rdbpredicates) | 是 | RdbPredicates的实例对象指定的更新条件。 |
1427| callback | AsyncCallback&lt;number&gt; | 是 | 指定的callback回调方法。返回受影响的行数。 |
1428
1429**示例:**
1430
1431```ts
1432import { ValuesBucket } from '@ohos.data.ValuesBucket';
1433
1434let key1 = "NAME";
1435let key2 = "AGE";
1436let key3 = "SALARY";
1437let key4 = "CODES";
1438let value1 = "Lisa";
1439let value2 = 18;
1440let value3 = 100.5;
1441let value4 = new Uint8Array([1, 2, 3, 4, 5]);
1442
1443const valueBucket: ValuesBucket = {
1444  key1: value1,
1445  key2: value2,
1446  key3: value3,
1447  key4: value4,
1448};
1449let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1450predicates.equalTo("NAME", "Lisa")
1451rdbStore.update(valueBucket, predicates, (err: BusinessError, rows: number) => {
1452  if (err) {
1453    console.info("Updated failed, err: " + err)
1454    return
1455  }
1456  console.log("Updated row count: " + rows)
1457})
1458```
1459
1460### update
1461
1462update(values: ValuesBucket, predicates: RdbPredicates):Promise&lt;number&gt;
1463
1464根据RdbPredicates的指定实例对象更新数据库中的数据,使用Promise异步回调。
1465
1466**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1467
1468**参数:**
1469
1470| 参数名 | 类型 | 必填 | 说明 |
1471| -------- | -------- | -------- | -------- |
1472| values | [ValuesBucket](#valuesbucket) | 是 | values指示数据库中要更新的数据行。键值对与数据库表的列名相关联。 |
1473| predicates | [RdbPredicates](#rdbpredicates) | 是 | RdbPredicates的实例对象指定的更新条件。 |
1474
1475**返回值**:
1476
1477| 类型 | 说明 |
1478| -------- | -------- |
1479| Promise&lt;number&gt; | 指定的Promise回调方法。返回受影响的行数。 |
1480
1481**示例:**
1482
1483```ts
1484import { ValuesBucket } from '@ohos.data.ValuesBucket';
1485
1486let key1 = "NAME";
1487let key2 = "AGE";
1488let key3 = "SALARY";
1489let key4 = "CODES";
1490let value1 = "Lisa";
1491let value2 = 18;
1492let value3 = 100.5;
1493let value4 = new Uint8Array([1, 2, 3, 4, 5]);
1494
1495const valueBucket: ValuesBucket = {
1496  key1: value1,
1497  key2: value2,
1498  key3: value3,
1499  key4: value4,
1500};
1501let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1502predicates.equalTo("NAME", "Lisa")
1503let promise: void = rdbStore.update(valueBucket, predicates)
1504promise.then(async (rows: number) => {
1505  console.log("Updated row count: " + rows)
1506}).catch((err: BusinessError) => {
1507  console.info("Updated failed, err: " + err)
1508})
1509```
1510
1511### delete
1512
1513delete(predicates: RdbPredicates, callback: AsyncCallback&lt;number&gt;):void
1514
1515根据RdbPredicates的指定实例对象从数据库中删除数据,使用callback异步回调。
1516
1517**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1518
1519**参数:**
1520
1521| 参数名 | 类型 | 必填 | 说明 |
1522| -------- | -------- | -------- | -------- |
1523| predicates | [RdbPredicates](#rdbpredicates) | 是 | RdbPredicates的实例对象指定的删除条件。 |
1524| callback | AsyncCallback&lt;number&gt; | 是 | 指定callback回调函数。返回受影响的行数。 |
1525
1526**示例:**
1527
1528```ts
1529let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1530predicates.equalTo("NAME", "Lisa")
1531rdbStore.delete(predicates, (err: BusinessError, rows: number) => {
1532  if (err) {
1533    console.info("Delete failed, err: " + err)
1534    return
1535  }
1536  console.log("Delete rows: " + rows)
1537})
1538```
1539
1540### delete
1541
1542delete(predicates: RdbPredicates):Promise&lt;number&gt;
1543
1544根据RdbPredicates的指定实例对象从数据库中删除数据,使用Promise异步回调。
1545
1546**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1547
1548**参数:**
1549
1550| 参数名 | 类型 | 必填 | 说明 |
1551| -------- | -------- | -------- | -------- |
1552| predicates | [RdbPredicates](#rdbpredicates) | 是 | RdbPredicates的实例对象指定的删除条件。 |
1553
1554**返回值**:
1555
1556| 类型 | 说明 |
1557| -------- | -------- |
1558| Promise&lt;number&gt; | Promise对象。返回受影响的行数。 |
1559
1560**示例:**
1561
1562```ts
1563let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1564predicates.equalTo("NAME", "Lisa")
1565let promise: void = rdbStore.delete(predicates)
1566promise.then((rows: number) => {
1567  console.log("Delete rows: " + rows)
1568}).catch((err: BusinessError) => {
1569  console.info("Delete failed, err: " + err)
1570})
1571```
1572
1573### query
1574
1575query(predicates: RdbPredicates, columns: Array&lt;string&gt;, callback: AsyncCallback&lt;ResultSet&gt;):void
1576
1577根据指定条件查询数据库中的数据,使用callback异步回调。
1578
1579**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1580
1581**参数:**
1582
1583| 参数名 | 类型 | 必填 | 说明 |
1584| -------- | -------- | -------- | -------- |
1585| predicates | [RdbPredicates](#rdbpredicates) | 是 | RdbPredicates的实例对象指定的查询条件。 |
1586| columns | Array&lt;string&gt; | 是 | 表示要查询的列。如果值为空,则查询应用于所有列。 |
1587| callback | AsyncCallback&lt;[ResultSet](js-apis-data-resultset.md)&gt; | 是 | 指定callback回调函数。如果操作成功,则返回ResultSet对象。 |
1588
1589**示例:**
1590
1591```ts
1592let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1593predicates.equalTo("NAME", "Rose")
1594rdbStore.query(predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"], (err: BusinessError, resultSet: void) => {
1595  if (err) {
1596    console.info("Query failed, err: " + err)
1597    return
1598  }
1599  console.log("ResultSet column names: " + resultSet.columnNames)
1600  console.log("ResultSet column count: " + resultSet.columnCount)
1601})
1602```
1603
1604### query
1605
1606query(predicates: RdbPredicates, columns?: Array&lt;string&gt;):Promise&lt;ResultSet&gt;
1607
1608根据指定条件查询数据库中的数据,使用Promise异步回调。
1609
1610**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1611
1612**参数:**
1613
1614| 参数名 | 类型 | 必填 | 说明 |
1615| -------- | -------- | -------- | -------- |
1616| predicates | [RdbPredicates](#rdbpredicates) | 是 | RdbPredicates的实例对象指定的查询条件。 |
1617| columns | Array&lt;string&gt; | 否 | 表示要查询的列。如果值为空,则查询应用于所有列。 |
1618
1619**返回值**:
1620
1621| 类型 | 说明 |
1622| -------- | -------- |
1623| Promise&lt;[ResultSet](js-apis-data-resultset.md)&gt; | Promise对象。如果操作成功,则返回ResultSet对象。 |
1624
1625**示例:**
1626
1627```ts
1628let predicates = new data_rdb.RdbPredicates("EMPLOYEE")
1629predicates.equalTo("NAME", "Rose")
1630let promise: void = rdbStore.query(predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"])
1631promise.then((resultSet: void) => {
1632  console.log("ResultSet column names: " + resultSet.columnNames)
1633  console.log("ResultSet column count: " + resultSet.columnCount)
1634}).catch((err: BusinessError) => {
1635  console.info("Query failed, err: " + err)
1636})
1637```
1638
1639### querySql<sup>8+</sup>
1640
1641querySql(sql: string, bindArgs: Array&lt;ValueType&gt;, callback: AsyncCallback&lt;ResultSet&gt;):void
1642
1643根据指定SQL语句查询数据库中的数据,使用callback异步回调。
1644
1645**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1646
1647**参数:**
1648
1649| 参数名 | 类型 | 必填 | 说明 |
1650| -------- | -------- | -------- | -------- |
1651| sql | string | 是 | 指定要执行的SQL语句。 |
1652| bindArgs | Array&lt;[ValueType](#valuetype)&gt; | 是 | SQL语句中参数的值。该值与sql参数语句中的占位符相对应。当sql参数语句完整时,该参数需为空数组。 |
1653| callback | AsyncCallback&lt;[ResultSet](js-apis-data-resultset.md)&gt; | 是 | 指定callback回调函数。如果操作成功,则返回ResultSet对象。 |
1654
1655**示例:**
1656
1657```ts
1658rdbStore.querySql("SELECT * FROM EMPLOYEE CROSS JOIN BOOK WHERE BOOK.NAME = ?", ['sanguo'], (err: BusinessError, resultSet: void) => {
1659  if (err) {
1660    console.info("Query failed, err: " + err)
1661    return
1662  }
1663  console.log("ResultSet column names: " + resultSet.columnNames)
1664  console.log("ResultSet column count: " + resultSet.columnCount)
1665})
1666```
1667
1668### querySql<sup>8+</sup>
1669
1670querySql(sql: string, bindArgs?: Array&lt;ValueType&gt;):Promise&lt;ResultSet&gt;
1671
1672根据指定SQL语句查询数据库中的数据,使用Promise异步回调。
1673
1674**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1675
1676**参数:**
1677
1678| 参数名 | 类型 | 必填 | 说明 |
1679| -------- | -------- | -------- | -------- |
1680| sql | string | 是 | 指定要执行的SQL语句。 |
1681| bindArgs | Array&lt;[ValueType](#valuetype)&gt; | 否 | SQL语句中参数的值。该值与sql参数语句中的占位符相对应。当sql参数语句完整时,该参数不填。 |
1682
1683**返回值**:
1684
1685| 类型 | 说明 |
1686| -------- | -------- |
1687| Promise&lt;[ResultSet](js-apis-data-resultset.md)&gt; | Promise对象。如果操作成功,则返回ResultSet对象。 |
1688
1689**示例:**
1690
1691```ts
1692let promise: void = rdbStore.querySql("SELECT * FROM EMPLOYEE CROSS JOIN BOOK WHERE BOOK.NAME = 'sanguo'")
1693promise.then((resultSet: void) => {
1694  console.log("ResultSet column names: " + resultSet.columnNames)
1695  console.log("ResultSet column count: " + resultSet.columnCount)
1696}).catch((err: BusinessError) => {
1697  console.info("Query failed, err: " + err)
1698})
1699```
1700
1701### executeSql<sup>8+</sup>
1702
1703executeSql(sql: string, bindArgs: Array&lt;ValueType&gt;, callback: AsyncCallback&lt;void&gt;):void
1704
1705执行包含指定参数但不返回值的SQL语句,使用callback异步回调。
1706
1707**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1708
1709**参数:**
1710
1711| 参数名 | 类型 | 必填 | 说明 |
1712| -------- | -------- | -------- | -------- |
1713| sql | string | 是 | 指定要执行的SQL语句。 |
1714| bindArgs | Array&lt;[ValueType](#valuetype)&gt; | 是 | SQL语句中参数的值。该值与sql参数语句中的占位符相对应。当sql参数语句完整时,该参数需为空数组。 |
1715| callback | AsyncCallback&lt;void&gt; | 是 | 指定callback回调函数。 |
1716
1717**示例:**
1718
1719```ts
1720const SQL_DELETE_TABLE = "DELETE FROM test WHERE name = ?"
1721rdbStore.executeSql(SQL_DELETE_TABLE, ['zhangsan'], (err: BusinessError) => {
1722  if (err) {
1723    console.info("ExecuteSql failed, err: " + err)
1724    return
1725  }
1726  console.info('Delete table done.')
1727})
1728```
1729
1730### executeSql<sup>8+</sup>
1731
1732executeSql(sql: string, bindArgs?: Array&lt;ValueType&gt;):Promise&lt;void&gt;
1733
1734执行包含指定参数但不返回值的SQL语句,使用Promise异步回调。
1735
1736**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1737
1738**参数:**
1739
1740| 参数名 | 类型 | 必填 | 说明 |
1741| -------- | -------- | -------- | -------- |
1742| sql | string | 是 | 指定要执行的SQL语句。 |
1743| bindArgs | Array&lt;[ValueType](#valuetype)&gt; | 否 | SQL语句中参数的值。该值与sql参数语句中的占位符相对应。当sql参数语句完整时,该参数不填。 |
1744
1745**返回值**:
1746
1747| 类型 | 说明 |
1748| -------- | -------- |
1749| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
1750
1751**示例:**
1752
1753```ts
1754const SQL_DELETE_TABLE = "DELETE FROM test WHERE name = 'zhangsan'"
1755let promise = rdbStore.executeSql(SQL_DELETE_TABLE)
1756promise.then(() => {
1757  console.info('Delete table done.')
1758}).catch((err: BusinessError) => {
1759  console.info("ExecuteSql failed, err: " + err)
1760})
1761```
1762
1763### beginTransaction<sup>8+</sup>
1764
1765beginTransaction():void
1766
1767在开始执行SQL语句之前,开始事务。
1768
1769**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1770
1771**示例:**
1772
1773```ts
1774import featureAbility from '@ohos.ability.featureAbility';
1775import { ValuesBucket } from '@ohos.data.ValuesBucket';
1776
1777let key1 = "NAME";
1778let key2 = "AGE";
1779let key3 = "SALARY";
1780let key4 = "blobType";
1781let value1 = "Lisa";
1782let value2 = 18;
1783let value3 = 100.5;
1784let value4 = new Uint8Array([1, 2, 3]);
1785
1786const valueBucket: ValuesBucket = {
1787  key1: value1,
1788  key2: value2,
1789  key3: value3,
1790  key4: value4,
1791};
1792
1793data_rdb.getRdbStore(this.context, "RdbTest.db", 1, async (err: BusinessError, rdbStore) => {
1794  rdbStore.beginTransaction()
1795  await rdbStore.insert("test", valueBucket)
1796  rdbStore.commit()
1797})
1798```
1799
1800### commit<sup>8+</sup>
1801
1802commit():void
1803
1804提交已执行的SQL语句。
1805
1806**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1807
1808**示例:**
1809
1810```ts
1811import { ValuesBucket } from '@ohos.data.ValuesBucket';
1812import featureAbility from '@ohos.ability.featureAbility';
1813
1814let key1 = "NAME";
1815let key2 = "AGE";
1816let key3 = "SALARY";
1817let key4 = "blobType";
1818let value1 = "Lisa";
1819let value2 = 18;
1820let value3 = 100.5;
1821let value4 = new Uint8Array([1, 2, 3]);
1822
1823const valueBucket: ValuesBucket = {
1824  key1: value1,
1825  key2: value2,
1826  key3: value3,
1827  key4: value4,
1828};
1829
1830data_rdb.getRdbStore(this.context, "RdbTest.db", 1, async (err: BusinessError, rdbStore) => {
1831  rdbStore.beginTransaction()
1832  await rdbStore.insert("test", valueBucket)
1833  rdbStore.commit()
1834})
1835```
1836
1837### rollBack<sup>8+</sup>
1838
1839rollBack():void
1840
1841回滚已经执行的SQL语句。
1842
1843**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1844
1845**示例:**
1846
1847```ts
1848import { ValuesBucket } from '@ohos.data.ValuesBucket';
1849import featureAbility from '@ohos.ability.featureAbility';
1850
1851let key1 = "NAME";
1852let key2 = "AGE";
1853let key3 = "SALARY";
1854let key4 = "blobType";
1855let value1 = "Lisa";
1856let value2 = 18;
1857let value3 = 100.5;
1858let value4 = new Uint8Array([1, 2, 3]);
1859
1860const valueBucket: ValuesBucket = {
1861  key1: value1,
1862  key2: value2,
1863  key3: value3,
1864  key4: value4,
1865};
1866
1867const STORE_CONFIG = { name: "RdbTest.db"}
1868data_rdb.getRdbStore(this,context, "RdbTest.db", 1, async (err: BusinessError, rdbStore) => {
1869    try {
1870		rdbStore.beginTransaction()
1871		await rdbStore.insert("test", valueBucket)
1872		rdbStore.commit()
1873	} catch (e) {
1874		rdbStore.rollBack()
1875	}
1876})
1877```
1878
1879### setDistributedTables<sup>8+</sup>
1880
1881setDistributedTables(tables: Array&lt;string&gt;, callback: AsyncCallback&lt;void&gt;): void
1882
1883设置分布式列表,使用callback异步回调。
1884
1885**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC
1886
1887**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1888
1889**参数:**
1890
1891| 参数名 | 类型 | 必填 | 说明 |
1892| -------- | -------- | -------- | -------- |
1893| tables | Array&lt;string&gt; | 是 | 要设置的分布式列表表名 |
1894| callback | AsyncCallback&lt;void&gt; | 是 | 指定callback回调函数。 |
1895
1896**示例:**
1897
1898```ts
1899rdbStore.setDistributedTables(["EMPLOYEE"], (err: BusinessError) => {
1900  if (err) {
1901    console.info('SetDistributedTables failed, err: ' + err)
1902    return
1903  }
1904  console.info('SetDistributedTables successfully.')
1905})
1906```
1907
1908### setDistributedTables<sup>8+</sup>
1909
1910 setDistributedTables(tables: Array&lt;string&gt;): Promise&lt;void&gt;
1911
1912设置分布式列表,使用Promise异步回调。
1913
1914**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC
1915
1916**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1917
1918**参数:**
1919
1920| 参数名 | 类型 | 必填 | 说明 |
1921| -------- | -------- | -------- | -------- |
1922| tables | Array&lt;string&gt; | 是 | 要设置的分布式列表表名。 |
1923
1924**返回值**:
1925
1926| 类型 | 说明 |
1927| -------- | -------- |
1928| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
1929
1930**示例:**
1931
1932```ts
1933let promise: void = rdbStore.setDistributedTables(["EMPLOYEE"])
1934promise.then(() => {
1935  console.info("SetDistributedTables successfully.")
1936}).catch((err: BusinessError) => {
1937  console.info("SetDistributedTables failed, err: " + err)
1938})
1939```
1940
1941### obtainDistributedTableName<sup>8+</sup>
1942
1943obtainDistributedTableName(device: string, table: string, callback: AsyncCallback&lt;string&gt;): void
1944
1945根据远程设备的本地表名获取指定远程设备的分布式表名。在查询远程设备数据库时,需要使用分布式表名, 使用callback异步回调。
1946
1947> **说明:**
1948>
1949> 其中device通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
1950
1951**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC
1952
1953**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
1954
1955**参数:**
1956
1957| 参数名 | 类型 | 必填 | 说明 |
1958| -------- | -------- | -------- | -------- |
1959| device | string | 是 | 远程设备ID 。 |
1960| table | string | 是 | 远程设备的本地表名 |
1961| callback | AsyncCallback&lt;string&gt; | 是 | 指定的callback回调函数。如果操作成功,返回远程设备的分布式表名。 |
1962
1963**示例:**
1964
1965```ts
1966import deviceManager from '@ohos.distributedHardware.deviceManager';
1967
1968let dmInstance: Array<string>;
1969
1970deviceManager.createDeviceManager("com.example.appdatamgrverify", (err: BusinessError, manager: void) => {
1971  if (err) {
1972    console.log("create device manager failed, err=" + err);
1973    return;
1974  }
1975  dmInstance = manager;
1976  let devices: Array<string> = dmInstance.getTrustedDeviceListSync();
1977  let deviceId: Array<string> = devices[0].deviceId;
1978})
1979
1980rdbStore.obtainDistributedTableName(deviceId, "EMPLOYEE", (err: BusinessError, tableName: String) {
1981  if (err) {
1982    console.info('ObtainDistributedTableName failed, err: ' + err)
1983    return
1984  }
1985  console.info('ObtainDistributedTableName successfully, tableName=.' + tableName)
1986})
1987```
1988
1989### obtainDistributedTableName<sup>8+</sup>
1990
1991 obtainDistributedTableName(device: string, table: string): Promise&lt;string&gt;
1992
1993根据远程设备的本地表名获取指定远程设备的分布式表名。在查询远程设备数据库时,需要使用分布式表名,使用Promise异步回调。
1994
1995> **说明:**
1996>
1997> 其中device通过调用<!--RP1-->[deviceManager.getTrustedDeviceListSync](../apis-distributedservice-kit/js-apis-device-manager-sys.md#gettrusteddevicelistsync)方法得到。<!--RP1End-->deviceManager模块的接口均为系统接口,仅系统应用可用。
1998
1999**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC
2000
2001**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
2002
2003**参数:**
2004
2005| 参数名 | 类型 | 必填 | 说明 |
2006| -------- | -------- | -------- | -------- |
2007| device | string | 是 | 远程设备ID。 |
2008| table | string | 是 | 远程设备的本地表名。 |
2009
2010**返回值**:
2011
2012| 类型 | 说明 |
2013| -------- | -------- |
2014| Promise&lt;string&gt; | Promise对象。如果操作成功,返回远程设备的分布式表名。 |
2015
2016**示例:**
2017
2018```ts
2019import deviceManager from '@ohos.distributedHardware.deviceManager';
2020
2021let dmInstance: Array<string>;
2022
2023deviceManager.createDeviceManager("com.example.appdatamgrverify", (err: BusinessError, manager: void) => {
2024  if (err) {
2025    console.log("create device manager failed, err=" + err);
2026    return;
2027  }
2028  dmInstance = manager;
2029  let devices: Array<string> = dmInstance.getTrustedDeviceListSync();
2030  let deviceId: Array<string> = devices[0].deviceId;
2031})
2032
2033let promise: void = rdbStore.obtainDistributedTableName(deviceId, "EMPLOYEE")
2034promise.then((tableName: String) => {
2035  console.info('ObtainDistributedTableName successfully, tableName= ' + tableName)
2036}).catch((err: BusinessError) => {
2037  console.info('ObtainDistributedTableName failed, err: ' + err)
2038})
2039```
2040
2041### sync<sup>8+</sup>
2042
2043sync(mode: SyncMode, predicates: RdbPredicates, callback: AsyncCallback&lt;Array&lt;[string, number]&gt;&gt;): void
2044
2045在设备之间同步数据, 使用callback异步回调。
2046
2047**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC
2048
2049**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
2050
2051**参数:**
2052
2053| 参数名 | 类型 | 必填 | 说明 |
2054| -------- | -------- | -------- | -------- |
2055| mode | [SyncMode](#syncmode8) | 是 | 指同步模式。该值可以是推、拉。 |
2056| predicates | [RdbPredicates](#rdbpredicates) | 是 | 约束同步数据和设备。 |
2057| callback | AsyncCallback&lt;Array&lt;[string, number]&gt;&gt; | 是 | 指定的callback回调函数,用于向调用者发送同步结果。string:设备ID;number:每个设备同步状态,0表示成功,其他值表示失败。|
2058
2059**示例:**
2060
2061```ts
2062import deviceManager from '@ohos.distributedHardware.deviceManager';
2063
2064let dmInstance: Array<string>;
2065
2066deviceManager.createDeviceManager("com.example.appdatamgrverify", (err: BusinessError, manager: void) => {
2067  if (err) {
2068    console.log("create device manager failed, err=" + err);
2069    return;
2070  }
2071  dmInstance = manager;
2072  let devices: Array<string> = dmInstance.getTrustedDeviceListSync();
2073  for (let i = 0; i < devices.length; i++) {
2074    let deviceIds: Array<string> = devices[i].deviceId;
2075  }
2076})
2077
2078let predicates = new data_rdb.RdbPredicates('EMPLOYEE')
2079predicates.inDevices(deviceIds)
2080rdbStore.sync(data_rdb.SyncMode.SYNC_MODE_PUSH, predicates, (err: BusinessError, result: void) {
2081  if (err) {
2082    console.log('Sync failed, err: ' + err)
2083    return
2084  }
2085  console.log('Sync done.')
2086  for (let i = 0; i < result.length; i++) {
2087    console.log('device=' + result[i][0] + ' status=' + result[i][1])
2088  }
2089})
2090```
2091
2092### sync<sup>8+</sup>
2093
2094 sync(mode: SyncMode, predicates: RdbPredicates): Promise&lt;Array&lt;[string, number]&gt;&gt;
2095
2096在设备之间同步数据,使用Promise异步回调。
2097
2098**需要权限:** ohos.permission.DISTRIBUTED_DATASYNC
2099
2100**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
2101
2102**参数:**
2103
2104| 参数名 | 类型 | 必填 | 说明 |
2105| -------- | -------- | -------- | -------- |
2106| mode | [SyncMode](#syncmode8) | 是 | 指同步模式。该值可以是推、拉。 |
2107| predicates | [RdbPredicates](#rdbpredicates) | 是 | 约束同步数据和设备。 |
2108
2109**返回值**:
2110
2111| 类型 | 说明 |
2112| -------- | -------- |
2113| Promise&lt;Array&lt;[string, number]&gt;&gt; | Promise对象,用于向调用者发送同步结果。string:设备ID;number:每个设备同步状态,0表示成功,其他值表示失败。 |
2114
2115**示例:**
2116
2117```ts
2118import deviceManager from '@ohos.distributedHardware.deviceManager';
2119
2120let dmInstance: Array<string>;
2121
2122deviceManager.createDeviceManager("com.example.appdatamgrverify", (err: BusinessError, manager: void) => {
2123  if (err) {
2124    console.log("create device manager failed, err=" + err);
2125    return;
2126  }
2127  dmInstance = manager;
2128  let devices: Array<string> = dmInstance.getTrustedDeviceListSync();
2129  for (let i = 0; i < devices.length; i++) {
2130    let deviceIds: Array<string> = devices[i].deviceId;
2131  }
2132})
2133
2134let predicates = new data_rdb.RdbPredicates('EMPLOYEE')
2135predicates.inDevices(deviceIds)
2136let promise: void = rdbStore.sync(data_rdb.SyncMode.SYNC_MODE_PUSH, predicates)
2137promise.then((result: void) =>{
2138  console.log('Sync done.')
2139  for (let i = 0; i < result.length; i++) {
2140    console.log('device=' + result[i][0] + ' status=' + result[i][1])
2141  }
2142}).catch((err: BusinessError) => {
2143  console.log('Sync failed')
2144})
2145```
2146
2147### on('dataChange')<sup>8+</sup>
2148
2149on(event: 'dataChange', type: SubscribeType, observer: Callback&lt;Array&lt;string&gt;&gt;): void
2150
2151注册数据库的观察者。当分布式数据库中的数据发生更改时,将调用回调。
2152
2153**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
2154
2155**参数:**
2156
2157| 参数名 | 类型 | 必填 | 说明 |
2158| -------- | -------- | -------- | -------- |
2159| event | string | 是 | 取值为'dataChange',表示数据更改。 |
2160| type | [SubscribeType](#subscribetype8) | 是 | 订阅类型。 |
2161| observer | Callback&lt;Array&lt;string&gt;&gt; | 是 | 指分布式数据库中数据更改事件的观察者。Array&lt;string>为数据库中的数据发生改变的对端设备ID。 |
2162
2163**示例:**
2164
2165```ts
2166let devices: Array<string>;
2167
2168try {
2169  rdbStore.on('dataChange', data_rdb.SubscribeType.SUBSCRIBE_TYPE_REMOTE, (storeObserver: Array<string>) => {
2170    for (let i = 0; i < devices.length; i++) {
2171      console.log('device=' + devices[i] + ' data changed')
2172    }
2173  })
2174} catch (err) {
2175  console.log('Register observer failed')
2176}
2177```
2178
2179### off('dataChange')<sup>8+</sup>
2180
2181off(event:'dataChange', type: SubscribeType, observer: Callback&lt;Array&lt;string&gt;&gt;): void
2182
2183从数据库中删除指定类型的指定观察者, 使用callback异步回调。
2184
2185**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core
2186
2187**参数:**
2188
2189| 参数名 | 类型 | 必填 | 说明 |
2190| -------- | -------- | -------- | -------- |
2191| event | string | 是 | 取值为'dataChange',表示数据更改。 |
2192| type | [SubscribeType](#subscribetype8)    | 是 | 订阅类型。 |
2193| observer | Callback&lt;Array&lt;string&gt;&gt; | 是 | 指已注册的数据更改观察者。Array&lt;string>为数据库中的数据发生改变的对端设备ID。 |
2194
2195**示例:**
2196
2197```ts
2198let devices: Array<string>;
2199
2200try {
2201  rdbStore.off('dataChange', data_rdb.SubscribeType.SUBSCRIBE_TYPE_REMOTE, (storeObserver: Array<string>) => {
2202    for (let i = 0; i < devices.length; i++) {
2203      console.log('device=' + devices[i] + ' data changed')
2204    }
2205  })
2206} catch (err) {
2207  console.log('Unregister observer failed')
2208}
2209```
2210