1# 数据库及持久化<a name="ZH-CN_TOPIC_0000001152064139"></a> 2 3- [简介](#section117mcpsimp) 4- [目录](#section124mcpsimp) 5- [约束](#section128mcpsimp) 6- [接口说明](#section136mcpsimp) 7 8- [使用说明](#section163mcpsimp) 9 - [插入接口参数说明](#section1099113151207) 10 - [删除接口参数说明](#section1098113151208) 11 - [更新接口参数说明](#section1099113151207) 12 - [查询接口参数说明](#section1096113151208) 13 - [接口调用代码示例](#section1558565082915) 14 15- [相关仓](#section206mcpsimp) 16 17## 简介<a name="section117mcpsimp"></a> 18 19数据库及持久化模块负责电话服务子系统中的SIM卡/短彩信等模块持久化数据存储,提供DataAbility访问接口。 20 21**图 1** 数据库及持久化架构图<a name="fig13267152558"></a> 22 23 24 25## 目录<a name="section124mcpsimp"></a> 26 27``` 28/base/telephony/data_storage # 数据库及持久化 29├─ common # 通用文件 30│ ├─ include # 头文件目录 31│ └─ src # 实现代码目录 32├─ config # config.json配置文件 33├─ figures # Readme资源文件 34├─ opkey # 随卡框架 35│ ├─ include # 头文件目录 36│ └─ src # 实现代码目录 37├─ pdp_profile # 网络运营商 38│ ├─ include # 头文件目录 39│ └─ src # 实现代码目录 40├─ signature # 签名文件 41├─ sim # sim卡 42│ ├─ include # 头文件目录 43│ └─ src # 实现代码目录 44├─ sms_mms # 短彩信 45│ ├─ include # 头文件目录 46│ └─ src # 实现代码目录 47└─ test # 测试相关 48 └── unit_test # 单元测试相关代码 49``` 50 51## 约束<a name="section128mcpsimp"></a> 52 53- 开发语言:C++ 54 55- 软件约束:需要与以下服务配合使用:公共基础子库系统,应用框架子系统。 56 57- 硬件约束:无 58 59- 使用场景:当用户需要获取电话服务子系统中的SIM卡/短彩信等模块持久化数据时,可通过DataAbilityHelper提供的增/删/改/查接口来获取数据。 60 61 访问时需要提供对应的权限和URI。 62 63### 接口说明<a name="section136mcpsimp"></a> 64 65**表 1** 增/删/改/查接口 66 67<a name="table165976561598"></a> 68 69| 接口定义 | **接口描述** | 70| ------------------------------------------------------------ | ------------ | 71| int Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) | 插入数据 | 72| int Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) | 删除数据 | 73| int Update( const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) | 更新数据 | 74| std::shared_ptr\<NativeRdb::AbsSharedResultSet\> Query( const Uri &uri, const std::vector\<std::string\> &columns, const NativeRdb::DataAbilityPredicates &predicates) | 查询数据 | 75 76**表 2** 权限说明 77 78<a name="table165976561598"></a> 79 80| 模块 | **所需权限** | 81| -------------- | ------------------------------------------------------------ | 82| 短彩信模块 | ohos.permission.READ_MESSAGES | 83| SIM卡模块 | ohos.permission.GET_TELEPHONY_STATE<br />ohos.permission.SET_TELEPHONY_STATE | 84| 网络运营商模块 | ohos.permission.GET_TELEPHONY_STATE<br />ohos.permission.SET_TELEPHONY_STATE | 85| 随卡框架模块 | ohos.permission.GET_TELEPHONY_STATE<br />ohos.permission.SET_TELEPHONY_STATE | 86 87## 使用说明<a name="section163mcpsimp"></a> 88 89### 插入接口参数说明<a name="section1099113151207"></a> 90 91**表 3** Insert接口参数说明 92 93<a name="table1234838197"></a> 94 95| 参数 | **说明** | 96| ----- | ------------------------------------- | 97| uri | 资源路径 | 98| value | 数据集合,字段对应当前操作的表结构字段 | 99 100### 删除接口参数说明<a name="section1098113151208"></a> 101 102**表 4** Delete接口参数说明 103 104<a name="table1234838197"></a> 105 106| 参数 | 说明 | 107| ---------- | ------------------------------------- | 108| uri | 资源路径 | 109| value | 数据集合,字段对应当前操作的表结构字段 | 110| predicates | 删除条件 | 111 112### 更新接口参数说明<a name="section1097113151210"></a> 113 114**表 5** Update接口参数说明 115 116<a name="table1234838197"></a> 117 118| 参数 | 说明 | 119| ---------- | -------- | 120| uri | 资源路径 | 121| predicates | 更新条件 | 122 123### 查询接口参数说明<a name="section1096113151208"></a> 124 125**表 6** Query接口参数说明 126 127<a name="table1234838197"></a> 128 129| 参数 | 说明 | 130| ---------- | -------------- | 131| uri | 资源路径 | 132| columns | 查询返回的字段 | 133| predicates | 查询条件 | 134 135### 接口调用代码示例<a name="section1558565082915"></a> 136 137以查询/插入/删除/更新短彩信数据为例,主要步骤和代码如下: 138 1391. 使用SystemAbilityManagerClient获得SystemAbilityManager对象。 1402. 使用saManager获得指定服务Id的IRemoteObject对象。 1413. 使用IRemoteObject创建DataAbilityHelper对象。 1424. 调用DataAbilityHelper::Query接口访问,并接收处理返回的数据。 143 144 创建DataAbilityHelper: 145 ``` 146 std::shared_ptr<AppExecFwk::DataAbilityHelper> CreateDataAHelper(int32_t systemAbilityId) 147 { 148 //通过SystemAbilityManagerClient获得SystemAbilityManager 149 auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); 150 if (saManager == nullptr) { 151 DATA_STORAGE_LOGE("DataSimRdbHelper Get system ability mgr failed."); 152 return nullptr; 153 } 154 // 获得IRemoteObject 155 auto remoteObj = saManager->GetSystemAbility(systemAbilityId); 156 while (remoteObj == nullptr) { 157 DATA_STORAGE_LOGE("DataSimRdbHelper GetSystemAbility Service Failed."); 158 return nullptr; 159 } 160 // 创建DataAbilityHelper 161 return AppExecFwk::DataAbilityHelper::Creator(remoteObj); 162 } 163 ``` 164 查询短彩信信息: 165 ``` 166 std::shared_ptr<NativeRdb::AbsSharedResultSet> SmsSelect(std::shared_ptr<AppExecFwk::DataAbilityHelper> helper) 167 { 168 // 资源路径 169 Uri uri("dataability:///com.ohos.smsmmsability/sms_mms/sms_mms_info"); 170 //查询返回的字段 171 std::vector<std::string> colume; 172 // 发送者号码 173 colume.push_back("sender_number"); 174 // 消息标题 175 colume.push_back("msg_title"); 176 // 消息内容 177 colume.push_back("msg_content"); 178 // 查询谓词 179 NativeRdb::DataAbilityPredicates predicates; 180 // 调用DataAbilityHelper::Query接口查询 181 return helper->Query(uri, colume, predicates); 182 } 183 ``` 184 插入短彩信信息: 185 ``` 186 int SmsInsert(std::shared_ptr<AppExecFwk::DataAbilityHelper> helper) 187 { 188 Uri uri("dataability:///com.ohos.smsmmsability/sms_mms/sms_mms_info"); 189 NativeRdb::ValuesBucket value; 190 // 接收者号码 191 value.PutString(SmsMmsInfo::RECEIVER_NUMBER, "138XXXXXXXX"); 192 // 消息内容 193 value.PutString(SmsMmsInfo::MSG_CONTENT, "ceshi"); 194 value.PutInt(SmsMmsInfo::GROUP_ID, 1); 195 return helper->Insert(uri, value); 196 } 197 ``` 198 删除短彩信信息: 199 ``` 200 int SmsDelete(std::shared_ptr<AppExecFwk::DataAbilityHelper> helper) 201 { 202 Uri uri("dataability:///com.ohos.smsmmsability/sms_mms/sms_mms_info"); 203 NativeRdb::DataAbilityPredicates predicates; 204 // 删除MSG_ID为1的信息 205 predicates.EqualTo(SmsMmsInfo::MSG_ID, "1"); 206 return helper->Delete(uri, predicates); 207 } 208 ``` 209 更新短彩信信息: 210 ``` 211 int SmsUpdate(std::shared_ptr<AppExecFwk::DataAbilityHelper> helper) 212 { 213 Uri uri("dataability:///com.ohos.smsmmsability/sms_mms/sms_mms_info"); 214 NativeRdb::ValuesBucket values; 215 // 信息内容 216 values.PutString(SmsMmsInfo::MSG_CONTENT, "hi ohos"); 217 NativeRdb::DataAbilityPredicates predicates; 218 // 信息Id 219 predicates.EqualTo(SmsMmsInfo::MSG_ID, "1"); 220 return helper->Update(uri, values, predicates); 221 } 222 ``` 223 224 225## 相关仓<a name="section206mcpsimp"></a> 226 227[电话服务子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E7%94%B5%E8%AF%9D%E6%9C%8D%E5%8A%A1%E5%AD%90%E7%B3%BB%E7%BB%9F.md) 228 229**telephony_data_storage** 230 231[telephony_core_service](https://gitee.com/openharmony/telephony_core_service/blob/master/README_zh.md) 232 233[telephony_sms_mms](https://gitee.com/openharmony/telephony_sms_mms/blob/master/README_zh.md) 234 235[telephony_cellular_call](https://gitee.com/openharmony/telephony_cellular_call/blob/master/README_zh.md) 236 237[telephony_call_manager](https://gitee.com/openharmony/telephony_call_manager/blob/master/README_zh.md) 238 239