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