1# Enums 2<!--Kit: ArkData--> 3<!--Subsystem: DistributedDataManager--> 4<!--Owner: @baijidong--> 5<!--Designer: @widecode; @htt1997--> 6<!--Tester: @yippo; @logic42--> 7<!--Adviser: @ge-yafang--> 8 9> **说明:** 10> 11> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 12 13## SecurityLevel 14 15数据库的安全级别枚举。请使用枚举名称而非枚举值。数据库的安全等级仅支持由低向高设置,不支持由高向低设置。 16 17> **说明:** 18> 19> 若需要进行同步操作,数据库安全等级应不高于对端设备安全等级,具体可见[跨设备同步访问控制机制](../../database/sync-app-data-across-devices-overview.md#跨设备同步访问控制机制)。 20 21**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 22 23| 名称 | 值 | 说明 | 24| ---- | ---- | ------------------------------------------------------------ | 25| S1 | 1 | 表示数据库的安全级别为低级别,当数据泄露时会产生较低影响。例如,包含壁纸等系统数据的数据库。 | 26| S2 | 2 | 表示数据库的安全级别为中级别,当数据泄露时会产生较大影响。例如,包含录音、视频等用户生成数据或通话记录等信息的数据库。 | 27| S3 | 3 | 表示数据库的安全级别为高级别,当数据泄露时会产生重大影响。例如,包含用户运动、健康、位置等信息的数据库。 | 28| S4 | 4 | 表示数据库的安全级别为关键级别,当数据泄露时会产生严重影响。例如,包含认证凭据、财务数据等信息的数据库。 | 29 30## EncryptionAlgo<sup>14+</sup> 31 32数据库的加密算法枚举。请使用枚举名称而非枚举值。 33 34**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 35 36| 名称 | 值 | 说明 | 37| ---- | ---- | ---- | 38| AES_256_GCM | 0 | AES_256_GCM加密算法。 | 39| AES_256_CBC | 1 | AES_256_CBC加密算法。 | 40 41## HmacAlgo<sup>14+</sup> 42 43数据库的HMAC算法枚举。请使用枚举名称而非枚举值。 44 45**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 46 47| 名称 | 值 | 说明 | 48| ---- | ---- | ---- | 49| SHA1 | 0 | HMAC_SHA1算法。 | 50| SHA256 | 1 | HMAC_SHA256算法。 | 51| SHA512 | 2 | HMAC_SHA512算法。 | 52 53## KdfAlgo<sup>14+</sup> 54 55数据库的PBKDF2算法枚举。请使用枚举名称而非枚举值。 56 57**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 58 59| 名称 | 值 | 说明 | 60| ---- | ---- | ---- | 61| KDF_SHA1 | 0 | PBKDF2_HMAC_SHA1算法。 | 62| KDF_SHA256 | 1 | PBKDF2_HMAC_SHA256算法。 | 63| KDF_SHA512 | 2 | PBKDF2_HMAC_SHA512算法。 | 64 65## Tokenizer<sup>17+</sup> 66 67描述fts(全文搜索)场景下使用的分词器枚举。请使用枚举名称而非枚举值。 68 69**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 70 71| 名称 | 值 | 说明 | 72| ------------------------------- | --- | -------------- | 73| NONE_TOKENIZER | 0 | 不使用分词器。 | 74| ICU_TOKENIZER | 1 | 表示使用icu分词器,支持中文以及多国语言。指定icu分词器时,可指定使用哪种语言,例如zh_CN表示中文,tr_TR表示土耳其语等。详细支持的语言种类,请查阅[ICU分词器](https://gitee.com/openharmony/third_party_icu/blob/master/icu4c/source/data/lang/zh.txt)。详细的语言缩写,请查阅该目录([ICU支持的语言缩写](https://gitee.com/openharmony/third_party_icu/tree/master/icu4c/source/data/locales))下的文件名。| 75| CUSTOM_TOKENIZER<sup>18+</sup> | 2 | 表示使用自研分词器,可支持中文(简体、繁体)、英文、阿拉伯数字。CUSTOM_TOKENIZER相比ICU_TOKENIZER在分词准确率、常驻内存占用上更有优势。自研分词器支持默认分词模式和短词分词模式(short_words)两种,使用参数cut_mode可指定模式,不指定模式时使用默认模式。 | 76 77在使用不同的分词器时,使用的创表语句会有所区别。 78 79**示例:** 80 81使用ICU_TOKENIZER分词器时,创建表的示例: 82 83```ts 84import { relationalStore } from '@kit.ArkData'; // 导入模块 85import { UIAbility } from '@kit.AbilityKit'; 86import { window } from '@kit.ArkUI'; 87 88// 此处示例在Stage模式、Ability中实现,使用者也可以在其他合理场景中使用 89class EntryAbility extends UIAbility { 90 async onWindowStageCreate(windowStage: window.WindowStage) { 91 let store: relationalStore.RdbStore | undefined = undefined; 92 const STORE_CONFIG: relationalStore.StoreConfig = { 93 name: "MyStore.db", 94 securityLevel: relationalStore.SecurityLevel.S3, 95 tokenizer: relationalStore.Tokenizer.ICU_TOKENIZER 96 }; 97 store = await relationalStore.getRdbStore(this.context, STORE_CONFIG); 98 99 const SQL_CREATE_TABLE = "CREATE VIRTUAL TABLE example USING fts4(name, content, tokenize=icu zh_CN)"; 100 if (store != undefined) { 101 (store as relationalStore.RdbStore).executeSql(SQL_CREATE_TABLE, (err) => { 102 if (err) { 103 console.error(`ExecuteSql failed, code is ${err.code},message is ${err.message}`); 104 return; 105 } 106 console.info('create virtual table done.'); 107 }); 108 } 109 } 110} 111``` 112 113使用CUSTOM_TOKENIZER分词器时,创建表的示例: 114 115```ts 116import { relationalStore } from '@kit.ArkData'; // 导入模块 117import { UIAbility } from '@kit.AbilityKit'; 118import { window } from '@kit.ArkUI'; 119 120// 此处示例在Stage模式、Ability中实现,使用者也可以在其他合理场景中使用 121class EntryAbility extends UIAbility { 122 async onWindowStageCreate(windowStage: window.WindowStage) { 123 let store: relationalStore.RdbStore | undefined = undefined; 124 const STORE_CONFIG: relationalStore.StoreConfig = { 125 name: "MyStore.db", 126 securityLevel: relationalStore.SecurityLevel.S3, 127 tokenizer: relationalStore.Tokenizer.CUSTOM_TOKENIZER 128 }; 129 store = await relationalStore.getRdbStore(this.context, STORE_CONFIG); 130 131 const SQL_CREATE_TABLE = "CREATE VIRTUAL TABLE example USING fts5(name, content, tokenize='customtokenizer')"; 132 if (store != undefined) { 133 (store as relationalStore.RdbStore).executeSql(SQL_CREATE_TABLE, (err) => { 134 if (err) { 135 console.error(`ExecuteSql failed, code is ${err.code},message is ${err.message}`); 136 return; 137 } 138 console.info('create virtual table done.'); 139 }); 140 } 141 } 142} 143``` 144 145使用CUSTOM_TOKENIZER分词器,并指定分词模式时,创建表的示例: 146 147```ts 148import { relationalStore } from '@kit.ArkData'; // 导入模块 149import { UIAbility } from '@kit.AbilityKit'; 150import { window } from '@kit.ArkUI'; 151 152export default class EntryAbility extends UIAbility { 153 async onWindowStageCreate(windowStage: window.WindowStage) { 154 console.info('custom tokenizer example: window stage create begin.'); 155 let store: relationalStore.RdbStore | undefined = undefined; 156 const storeConfig: relationalStore.StoreConfig = { 157 name: "MyStore.db", 158 securityLevel: relationalStore.SecurityLevel.S3 159 }; 160 let customType = relationalStore.Tokenizer.CUSTOM_TOKENIZER; 161 let customTypeSupported = relationalStore.isTokenizerSupported(customType); 162 if (customTypeSupported) { 163 storeConfig.tokenizer = customType; 164 } else { 165 console.info('custom tokenizer example: not support custom tokenizer.'); 166 return; 167 } 168 store = await relationalStore.getRdbStore(this.context, storeConfig); 169 170 const sqlCreateTable = 171 "CREATE VIRTUAL TABLE example USING fts5(name, content, tokenize='customtokenizer cut_mode short_words')"; 172 if (store != undefined) { 173 (store as relationalStore.RdbStore).executeSql(sqlCreateTable, (err) => { 174 if (err) { 175 console.error(`custom tokenizer example: ExecuteSql failed, code is ${err.code},message is ${err.message}`); 176 return; 177 } 178 console.info('custom tokenizer example: create virtual table done.'); 179 }); 180 } 181 } 182} 183``` 184 185## AssetStatus<sup>10+</sup> 186 187描述资产附件的状态枚举。请使用枚举名称而非枚举值。 188 189**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 190 191| 名称 | 值 | 说明 | 192| ------------------------------- | --- | -------------- | 193| ASSET_NORMAL | 1 | 表示资产状态正常。 | 194| ASSET_INSERT | 2 | 表示资产需要插入到云端。 | 195| ASSET_UPDATE | 3 | 表示资产需要更新到云端。 | 196| ASSET_DELETE | 4 | 表示资产需要在云端删除。 | 197| ASSET_ABNORMAL | 5 | 表示资产状态异常。 | 198| ASSET_DOWNLOADING | 6 | 表示资产正在下载到本地设备。 | 199 200## SyncMode 201 202指数据库同步模式。请使用枚举名称而非枚举值。 203 204| 名称 | 值 | 说明 | 205| -------------- | ---- | ---------------------------------- | 206| SYNC_MODE_PUSH | 0 | 表示数据从本地设备推送到远程设备。<br>**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core | 207| SYNC_MODE_PULL | 1 | 表示数据从远程设备拉至本地设备。<br>**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core | 208| SYNC_MODE_TIME_FIRST<sup>10+</sup> | 4 | 表示数据从修改时间较近的一端同步到修改时间较远的一端。<br>**系统能力:** SystemCapability.DistributedDataManager.CloudSync.Client | 209| SYNC_MODE_NATIVE_FIRST<sup>10+</sup> | 5 | 表示数据从本地设备同步到云端。<br>**系统能力:** SystemCapability.DistributedDataManager.CloudSync.Client | 210| SYNC_MODE_CLOUD_FIRST<sup>10+</sup> | 6 | 表示数据从云端同步到本地设备。<br>**系统能力:** SystemCapability.DistributedDataManager.CloudSync.Client | 211 212## Origin<sup>11+</sup> 213 214表示数据来源。请使用枚举名称而非枚举值。 215 216**系统能力:** SystemCapability.DistributedDataManager.CloudSync.Client 217 218| 名称 | 值 | 说明 | 219| -------------- | ---- | ---------------------------------- | 220| LOCAL | 0 | 表示本地数据。 | 221| CLOUD | 1 | 表示云端同步的数据。 | 222| REMOTE | 2 | 表示端端同步的数据。 | 223 224## Field<sup>11+</sup> 225 226用于谓词查询条件的特殊字段。请使用枚举名称而非枚举值。 227 228**系统能力:** SystemCapability.DistributedDataManager.CloudSync.Client 229 230| 名称 | 值 | 说明 | 231| -------------- | ---- | ---------------------------------- | 232| CURSOR_FIELD | '#_cursor' | 用于cursor查找的字段名。| 233| ORIGIN_FIELD | '#_origin' | 用于cursor查找时指定数据来源的字段名。 | 234| DELETED_FLAG_FIELD | '#_deleted_flag' | 用于cursor查找的结果集返回时填充的字段,表示云端删除的数据同步到本地后数据是否清理。<br>返回的结果集中,该字段对应的value为false表示数据未清理,true表示数据已清理。| 235| DATA_STATUS_FIELD<sup>12+</sup> | '#_data_status' | 用于cursor查找的结果集返回时填充的字段,返回的结果集中,该字段对应的0表示正常数据,1表示退出账号保留数据,2表示云侧同步删除,3表示退出账户删除数据。| 236| OWNER_FIELD | '#_cloud_owner' | 用于共享表中查找owner时,返回的结果集中填充的字段,表示当前共享记录的共享发起者。| 237| PRIVILEGE_FIELD | '#_cloud_privilege' | 用于共享表中查找共享数据权限时,返回的结果集中填充的字段,表示当前共享记录的允许的操作权限。| 238| SHARING_RESOURCE_FIELD | '#_sharing_resource_field' | 用于数据共享查找共享数据的共享资源时,返回的结果集中填充的字段,表示共享数据的共享资源标识。| 239 240## SubscribeType 241 242描述订阅类型。请使用枚举名称而非枚举值。 243 244| 名称 | 值 | 说明 | 245| --------------------- | ---- | ------------------ | 246| SUBSCRIBE_TYPE_REMOTE | 0 | 订阅远程数据更改。<br>**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core | 247| SUBSCRIBE_TYPE_CLOUD<sup>10+</sup> | 1 | 订阅云端数据更改。<br>**系统能力:** SystemCapability.DistributedDataManager.CloudSync.Client | 248| SUBSCRIBE_TYPE_CLOUD_DETAILS<sup>10+</sup> | 2 | 订阅云端数据更改详情。<br>**系统能力:** SystemCapability.DistributedDataManager.CloudSync.Client | 249| SUBSCRIBE_TYPE_LOCAL_DETAILS<sup>12+</sup> | 3 | 订阅本地数据更改详情。<br>**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core | 250 251## RebuildType<sup>12+</sup> 252 253描述数据库重建类型的枚举。请使用枚举名称而非枚举值。 254 255**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 256 257| 名称 | 值 | 说明 | 258| ------- | ---- |----------------------------------------------------------------------------------------------------------------| 259| NONE | 0 | 表示数据库未进行重建。 | 260| REBUILT | 1 | 表示数据库进行了重建并且生成了空数据库,需要应用重新建表和恢复数据。 | 261| REPAIRED | 2 | 表示数据库进行了修复,恢复了未损坏的数据,当前只有[向量数据库](arkts-apis-data-relationalStore-i.md#storeconfig)具备该能力。 | 262 263## ChangeType<sup>10+</sup> 264 265描述数据变更类型的枚举。请使用枚举名称而非枚举值。 266 267**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 268 269| 名称 | 值 | 说明 | 270| -------------------------- | --- | -------------------------- | 271| DATA_CHANGE | 0 | 表示是数据发生变更。 | 272| ASSET_CHANGE | 1 | 表示是资产附件发生了变更。 | 273 274## DistributedType<sup>10+</sup> 275 276描述表的分布式类型的枚举。请使用枚举名称而非枚举值。 277 278| 名称 | 值 | 说明 | 279| ------------------ | --- | -------------------------------------------------------------------------------------------------- | 280| DISTRIBUTED_DEVICE | 0 | 表示在不同设备之间分布式的数据库表。<br>**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core | 281| DISTRIBUTED_CLOUD | 1 | 表示在设备和云端之间分布式的数据库表。<br>**系统能力:** SystemCapability.DistributedDataManager.CloudSync.Client | 282 283## ConflictResolution<sup>10+</sup> 284 285插入和修改接口的冲突解决模式。请使用枚举名称而非枚举值。 286 287**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 288 289| 名称 | 值 | 说明 | 290| -------------------- | ---- | ------------------------------------------------------------ | 291| ON_CONFLICT_NONE | 0 | 表示当冲突发生时,不做任何处理。 | 292| ON_CONFLICT_ROLLBACK | 1 | 表示当冲突发生时,中止SQL语句并回滚当前事务。 | 293| ON_CONFLICT_ABORT | 2 | 表示当冲突发生时,中止当前SQL语句,并撤销当前 SQL 语句所做的任何更改,但是由同一事务中先前的 SQL 语句引起的更改被保留并且事务保持活动状态。 | 294| ON_CONFLICT_FAIL | 3 | 表示当冲突发生时,中止当前 SQL 语句。但它不会撤销失败的 SQL 语句的先前更改,也不会结束事务。 | 295| ON_CONFLICT_IGNORE | 4 | 表示当冲突发生时,跳过包含违反约束的行并继续处理 SQL 语句的后续行。 | 296| ON_CONFLICT_REPLACE | 5 | 表示当冲突发生时,在插入或更新当前行之前删除导致约束违例的预先存在的行,并且命令会继续正常执行。 | 297 298## Progress<sup>10+</sup> 299 300描述端云同步过程的枚举。请使用枚举名称而非枚举值。 301 302**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 303 304| 名称 | 值 | 说明 | 305| ---------------- | ---- | ------------------------ | 306| SYNC_BEGIN | 0 | 表示端云同步过程开始。 | 307| SYNC_IN_PROGRESS | 1 | 表示正在端云同步过程中。 | 308| SYNC_FINISH | 2 | 表示端云同步过程已完成。 | 309 310## ProgressCode<sup>10+</sup> 311 312表示端云同步过程的状态。请使用枚举名称而非枚举值。 313 314**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 315 316| 名称 | 值 | 说明 | 317| --------------------- | ---- | ------------------------------------------------------------ | 318| SUCCESS | 0 | 表示端云同步过程成功。 | 319| UNKNOWN_ERROR | 1 | 表示端云同步过程遇到未知错误。 | 320| NETWORK_ERROR | 2 | 表示端云同步过程遇到网络错误。 | 321| CLOUD_DISABLED | 3 | 表示云端不可用。 | 322| LOCKED_BY_OTHERS | 4 | 表示有其他设备正在端云同步,本设备无法进行端云同步。<br>请确保无其他设备占用云端资源后,再使用本设备进行端云同步任务。 | 323| RECORD_LIMIT_EXCEEDED | 5 | 表示本次端云同步需要同步的条目或大小超出最大值。由云端配置最大值。 | 324| NO_SPACE_FOR_ASSET | 6 | 表示云空间剩余空间小于待同步的资产大小。 | 325| BLOCKED_BY_NETWORK_STRATEGY<sup>12+</sup> | 7 | 表示端云同步被网络策略限制。 | 326 327## TransactionType<sup>14+</sup> 328 329描述创建事务对象的枚举。请使用枚举名称而非枚举值。 330 331**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 332 333| 名称 | 值 | 说明 | 334| ---------------- | ---- | ------------------------ | 335| DEFERRED | 0 | 表示创建一个DEFERRED类型的事务对象,该类型的事务对象在创建时只会关闭自动提交而不会真正开始事务,只有在首次读或写操作时会真正开始一个读或写事务。 | 336| IMMEDIATE | 1 | 表示创建一个IMMEDIATE类型的事务对象,该类型的事务对象在创建时会真正开始一个写事务;如果有别的写事务未提交,则会创建失败,返回错误码14800024。 | 337| EXCLUSIVE | 2 | 表示创建一个EXCLUSIVE类型的事务对象,该类型的事务在WAL模式下和IMMEDIATE相同,但在其他日志模式下能够防止事务期间有其他连接读取数据库。 | 338 339## ColumnType<sup>18+</sup> 340 341描述数据库列存储类型的枚举。请使用枚举名称而非枚举值。 342 343**系统能力:** SystemCapability.DistributedDataManager.RelationalStore.Core 344 345| 名称 | 值 | 说明 | 346| ------------- | ---- | ------------------------------------------------------------ | 347| NULL | 0 | 表示列数据类型为NULL。 | 348| INTEGER | 1 | 表示列数据类型为64位整数。可用于保存8位(包括布尔值)、16位、32位、64位整数。如果64位整数大于2^53或小于-2^53,需使用[getString](arkts-apis-data-relationalStore-ResultSet.md#getstring)将64位整数转换为字符串。 | 349| REAL | 2 | 表示列类型为浮点数。 | 350| TEXT | 3 | 表示列类型为字符串。 | 351| BLOB | 4 | 表示列类型为Uint8Array。 | 352| ASSET | 5 | 表示列类型为[Asset](arkts-apis-data-relationalStore-i.md#asset10)。 | 353| ASSETS | 6 | 表示列类型为[Assets](arkts-apis-data-relationalStore-t.md#assets10)。 | 354| FLOAT_VECTOR | 7 | 表示列类型为Float32Array。 | 355| UNLIMITED_INT | 8 | 表示列类型为bigint。 |