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卡/短彩信等模块持久化数据存储,提供DataShare访问接口。 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├─ figures # Readme资源文件 33├─ opkey # 随卡框架 34│ ├─ include # 头文件目录 35│ └─ src # 实现代码目录 36├─ pdp_profile # 网络运营商 37│ ├─ include # 头文件目录 38│ └─ src # 实现代码目录 39├─ signature # 签名文件 40├─ sim # sim卡 41│ ├─ include # 头文件目录 42│ └─ src # 实现代码目录 43├─ sms_mms # 短彩信 44│ ├─ include # 头文件目录 45│ └─ src # 实现代码目录 46└─ test # 测试相关 47 └── unit_test # 单元测试相关代码 48``` 49 50## 约束<a name="section128mcpsimp"></a> 51 52- 开发语言:C++ 53 54- 软件约束:需要与以下服务配合使用:公共基础子库系统,应用框架子系统。 55 56- 硬件约束:无 57 58- 使用场景:当用户需要获取电话服务子系统中的SIM卡/短彩信等模块持久化数据时,可通过DataShareHelper提供的增/删/改/查接口来获取数据。 59 60 访问时需要提供对应的权限和URI。 61 62### 接口说明<a name="section136mcpsimp"></a> 63 64**表 1** 增/删/改/查接口 65 66<a name="table165976561598"></a> 67 68| 接口定义 | **接口描述** | 69| ------------------------------------------------------------ | ------------ | 70| int Insert(Uri &uri, const DataShare::DataShareValuesBucket &value) | 插入数据 | 71| int Delete(const Uri &uri, const DataShare::DataSharePredicates &predicates) | 删除数据 | 72| int Update(Uri &uri, const DataSharePredicates &predicates, const DataShareValuesBucket &value) | 更新数据 | 73| std::shared_ptr\<DataShare::DataShareResultSet\> Query(Uri &uri, const DataSharePredicates &predicates, std::vector\<std::string\> &columns) | 查询数据 | 74 75**表 2** 权限说明 76 77<a name="table165976561598"></a> 78 79| 模块 | **所需权限** | 80| -------------- | ------------------------------------------------------------ | 81| 短彩信模块 | ohos.permission.READ_MESSAGES | 82| SIM卡模块 | ohos.permission.GET_TELEPHONY_STATE<br />ohos.permission.SET_TELEPHONY_STATE | 83| 网络运营商模块 | ohos.permission.GET_TELEPHONY_STATE<br />ohos.permission.SET_TELEPHONY_STATE | 84| 随卡框架模块 | ohos.permission.GET_TELEPHONY_STATE<br />ohos.permission.SET_TELEPHONY_STATE | 85 86## 使用说明<a name="section163mcpsimp"></a> 87 88### 插入接口参数说明<a name="section1099113151207"></a> 89 90**表 3** Insert接口参数说明 91 92<a name="table1234838197"></a> 93 94| 参数 | **说明** | 95| ----- | ------------------------------------- | 96| uri | 资源路径 | 97| value | 数据集合,字段对应当前操作的表结构字段 | 98 99### 删除接口参数说明<a name="section1098113151208"></a> 100 101**表 4** Delete接口参数说明 102 103<a name="table1234838197"></a> 104 105| 参数 | 说明 | 106| ---------- | ------------------------------------- | 107| uri | 资源路径 | 108| predicates | 删除条件 | 109 110### 更新接口参数说明<a name="section1097113151210"></a> 111 112**表 5** Update接口参数说明 113 114<a name="table1234838197"></a> 115 116| 参数 | 说明 | 117| ---------- | -------- | 118| uri | 资源路径 | 119| predicates | 更新条件 | 120| value | 数据集合,字段对应当前操作的表结构字段 | 121 122### 查询接口参数说明<a name="section1096113151208"></a> 123 124**表 6** Query接口参数说明 125 126<a name="table1234838197"></a> 127 128| 参数 | 说明 | 129| ---------- | -------------- | 130| uri | 资源路径 | 131| predicates | 查询条件 | 132| columns | 查询返回的字段 | 133 134### 接口调用代码示例<a name="section1558565082915"></a> 135 136以查询/插入/删除/更新短彩信数据为例,主要步骤和代码如下: 137 1381. 使用SystemAbilityManagerClient获得SystemAbilityManager对象。 1392. 使用saManager获得指定服务Id的IRemoteObject对象。 1403. 使用IRemoteObject创建DataShareHelper对象。 1414. 调用DataShareHelper::Query接口访问,并接收处理返回的数据。 142 143 创建DataShareHelper: 144 ``` 145 std::shared_ptr<DataShare::DataShareHelper> DataStorageGtest::CreateDataShareHelper( 146 int32_t systemAbilityId, std::string &uri) 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 // 创建DataShareHelper 161 return DataShare::DataShareHelper::Creator(remoteObj, uri); 162 } 163 ``` 164 查询短彩信信息: 165 ``` 166 std::shared_ptr<DataShare::DataShareResultSet> DataStorageGtest::SmsSelect(const std::shared_ptr<DataShare::DataShareHelper> &helper) 167 { 168 // 资源路径 169 Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info"); 170 //查询返回的字段 171 std::vector<std::string> columns; 172 // 发送者号码 173 columns.push_back("sender_number"); 174 // 消息标题 175 columns.push_back("msg_title"); 176 // 消息内容 177 columns.push_back("msg_content"); 178 // 查询谓词 179 DataShare::DataSharePredicates predicates; 180 // 调用DataShareHelper::Query接口查询 181 return helper->Query(uri, predicates, columns); 182 } 183 ``` 184 插入短彩信信息: 185 ``` 186 int SmsInsert(std::shared_ptr<DataShare::DataShareHelper> &helper) 187 { 188 Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info"); 189 DataShare::DataShareValuesBucket value; 190 // 接收者号码 191 value.Put(SmsMmsInfo::RECEIVER_NUMBER, "138XXXXXXXX"); 192 // 消息内容 193 value.Put(SmsMmsInfo::MSG_CONTENT, "ceshi"); 194 value.Put(SmsMmsInfo::GROUP_ID, 1); 195 return helper->Insert(uri, value); 196 } 197 ``` 198 删除短彩信信息: 199 ``` 200 int SmsDelete(std::shared_ptr<DataShare::DataShareHelper> helper) 201 { 202 Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info"); 203 DataShare::DataSharePredicates 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<DataShare::DataShareHelper> helper) 212 { 213 Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info"); 214 DataShare::DataShareValuesBucket values; 215 // 信息内容 216 values.Put(SmsMmsInfo::MSG_CONTENT, "hi ohos"); 217 DataShare::DataSharePredicates predicates; 218 // 信息Id 219 predicates.EqualTo(SmsMmsInfo::MSG_ID, "1"); 220 return helper->Update(uri, predicates, values); 221 } 222 ``` 223 224 225## 相关仓<a name="section206mcpsimp"></a> 226 227[电话服务子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/电话服务子系统.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