# 数据库及持久化
- [简介](#section117mcpsimp)
- [目录](#section124mcpsimp)
- [约束](#section128mcpsimp)
- [接口说明](#section136mcpsimp)
- [使用说明](#section163mcpsimp)
- [插入接口参数说明](#section1099113151207)
- [删除接口参数说明](#section1098113151208)
- [更新接口参数说明](#section1099113151207)
- [查询接口参数说明](#section1096113151208)
- [接口调用代码示例](#section1558565082915)
- [相关仓](#section206mcpsimp)
## 简介
数据库及持久化模块负责电话服务子系统中的SIM卡/短彩信等模块持久化数据存储,提供DataShare访问接口。
**图 1** 数据库及持久化架构图

## 目录
```
/base/telephony/data_storage # 数据库及持久化
├─ common # 通用文件
│ ├─ include # 头文件目录
│ └─ src # 实现代码目录
├─ figures # Readme资源文件
├─ opkey # 随卡框架
│ ├─ include # 头文件目录
│ └─ src # 实现代码目录
├─ pdp_profile # 网络运营商
│ ├─ include # 头文件目录
│ └─ src # 实现代码目录
├─ signature # 签名文件
├─ sim # sim卡
│ ├─ include # 头文件目录
│ └─ src # 实现代码目录
├─ sms_mms # 短彩信
│ ├─ include # 头文件目录
│ └─ src # 实现代码目录
└─ test # 测试相关
└── unit_test # 单元测试相关代码
```
## 约束
- 开发语言:C++
- 软件约束:需要与以下服务配合使用:公共基础子库系统,应用框架子系统。
- 硬件约束:无
- 使用场景:当用户需要获取电话服务子系统中的SIM卡/短彩信等模块持久化数据时,可通过DataShareHelper提供的增/删/改/查接口来获取数据。
访问时需要提供对应的权限和URI。
### 接口说明
**表 1** 增/删/改/查接口
| 接口定义 | **接口描述** |
| ------------------------------------------------------------ | ------------ |
| int Insert(Uri &uri, const DataShare::DataShareValuesBucket &value) | 插入数据 |
| int Delete(const Uri &uri, const DataShare::DataSharePredicates &predicates) | 删除数据 |
| int Update(Uri &uri, const DataSharePredicates &predicates, const DataShareValuesBucket &value) | 更新数据 |
| std::shared_ptr\ Query(Uri &uri, const DataSharePredicates &predicates, std::vector\ &columns) | 查询数据 |
**表 2** 权限说明
| 模块 | **所需权限** |
| -------------- | ------------------------------------------------------------ |
| 短彩信模块 | ohos.permission.READ_MESSAGES |
| SIM卡模块 | ohos.permission.GET_TELEPHONY_STATE
ohos.permission.SET_TELEPHONY_STATE |
| 网络运营商模块 | ohos.permission.GET_TELEPHONY_STATE
ohos.permission.SET_TELEPHONY_STATE |
| 随卡框架模块 | ohos.permission.GET_TELEPHONY_STATE
ohos.permission.SET_TELEPHONY_STATE |
## 使用说明
### 插入接口参数说明
**表 3** Insert接口参数说明
| 参数 | **说明** |
| ----- | ------------------------------------- |
| uri | 资源路径 |
| value | 数据集合,字段对应当前操作的表结构字段 |
### 删除接口参数说明
**表 4** Delete接口参数说明
| 参数 | 说明 |
| ---------- | ------------------------------------- |
| uri | 资源路径 |
| predicates | 删除条件 |
### 更新接口参数说明
**表 5** Update接口参数说明
| 参数 | 说明 |
| ---------- | -------- |
| uri | 资源路径 |
| predicates | 更新条件 |
| value | 数据集合,字段对应当前操作的表结构字段 |
### 查询接口参数说明
**表 6** Query接口参数说明
| 参数 | 说明 |
| ---------- | -------------- |
| uri | 资源路径 |
| predicates | 查询条件 |
| columns | 查询返回的字段 |
### 接口调用代码示例
以查询/插入/删除/更新短彩信数据为例,主要步骤和代码如下:
1. 使用SystemAbilityManagerClient获得SystemAbilityManager对象。
2. 使用saManager获得指定服务Id的IRemoteObject对象。
3. 使用IRemoteObject创建DataShareHelper对象。
4. 调用DataShareHelper::Query接口访问,并接收处理返回的数据。
创建DataShareHelper:
```
std::shared_ptr DataStorageGtest::CreateDataShareHelper(
int32_t systemAbilityId, std::string &uri)
{
//通过SystemAbilityManagerClient获得SystemAbilityManager
auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
if (saManager == nullptr) {
DATA_STORAGE_LOGE("DataSimRdbHelper Get system ability mgr failed.");
return nullptr;
}
// 获得IRemoteObject
auto remoteObj = saManager->GetSystemAbility(systemAbilityId);
while (remoteObj == nullptr) {
DATA_STORAGE_LOGE("DataSimRdbHelper GetSystemAbility Service Failed.");
return nullptr;
}
// 创建DataShareHelper
return DataShare::DataShareHelper::Creator(remoteObj, uri);
}
```
查询短彩信信息:
```
std::shared_ptr DataStorageGtest::SmsSelect(const std::shared_ptr &helper)
{
// 资源路径
Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info");
//查询返回的字段
std::vector columns;
// 发送者号码
columns.push_back("sender_number");
// 消息标题
columns.push_back("msg_title");
// 消息内容
columns.push_back("msg_content");
// 查询谓词
DataShare::DataSharePredicates predicates;
// 调用DataShareHelper::Query接口查询
return helper->Query(uri, predicates, columns);
}
```
插入短彩信信息:
```
int SmsInsert(std::shared_ptr &helper)
{
Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info");
DataShare::DataShareValuesBucket value;
// 接收者号码
value.Put(SmsMmsInfo::RECEIVER_NUMBER, "138XXXXXXXX");
// 消息内容
value.Put(SmsMmsInfo::MSG_CONTENT, "ceshi");
value.Put(SmsMmsInfo::GROUP_ID, 1);
return helper->Insert(uri, value);
}
```
删除短彩信信息:
```
int SmsDelete(std::shared_ptr helper)
{
Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info");
DataShare::DataSharePredicates predicates;
// 删除MSG_ID为1的信息
predicates.EqualTo(SmsMmsInfo::MSG_ID, "1");
return helper->Delete(uri, predicates);
}
```
更新短彩信信息:
```
int SmsUpdate(std::shared_ptr helper)
{
Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info");
DataShare::DataShareValuesBucket values;
// 信息内容
values.Put(SmsMmsInfo::MSG_CONTENT, "hi ohos");
DataShare::DataSharePredicates predicates;
// 信息Id
predicates.EqualTo(SmsMmsInfo::MSG_ID, "1");
return helper->Update(uri, predicates, values);
}
```
## 相关仓
[电话服务子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/电话服务子系统.md)
**telephony_data_storage**
[telephony_core_service](https://gitee.com/openharmony/telephony_core_service/blob/master/README_zh.md)
[telephony_sms_mms](https://gitee.com/openharmony/telephony_sms_mms/blob/master/README_zh.md)
[telephony_cellular_call](https://gitee.com/openharmony/telephony_cellular_call/blob/master/README_zh.md)
[telephony_call_manager](https://gitee.com/openharmony/telephony_call_manager/blob/master/README_zh.md)