# telephony_telephony_data_3
**Repository Path**: wangwei30043812/telephony_telephony_data_3
## Basic Information
- **Project Name**: telephony_telephony_data_3
- **Description**: Provides telephony persistent data storage and DataAbility access interfaces | 负责telephony持久化数据存储,提供DataAbility访问接口
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 186
- **Created**: 2023-07-17
- **Last Updated**: 2023-07-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 数据库及持久化
-   [简介](#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)