diff --git a/zh-cn/application-dev/database/database-relational-guidelines.md b/zh-cn/application-dev/database/database-relational-guidelines.md
index 5ed616ac6ed73dca02109d68b7be7fd3b381cf9d..2983cd4c97f3fd76028a8697127b9214d6a86bd8 100644
--- a/zh-cn/application-dev/database/database-relational-guidelines.md
+++ b/zh-cn/application-dev/database/database-relational-guidelines.md
@@ -32,8 +32,8 @@
| 类名 | 接口名 | 描述 |
| -------- | -------- | -------- |
- | RdbStore | insert(name: string, values: ValuesBucket, callback: AsyncCallback<number>):void | 向目标表中插入一行数据,结果以callback形式返回。
- name:指定的目标表名。
- values:表示要插入到表中的数据行。
- callback:指定callback回调函数。如果操作成功,返回行ID;否则返回-1。 |
- | RdbStore | insert(name: string, values: ValuesBucket): Promise<number> | 向目标表中插入一行数据,结果以Promise形式返回。
- name:指定的目标表名。
- values:表示要插入到表中的数据行。 |
+ | RdbStore | insert(table: string, values: ValuesBucket, callback: AsyncCallback<number>):void | 向目标表中插入一行数据,结果以callback形式返回。
- table:指定的目标表名。
- values:表示要插入到表中的数据行。
- callback:指定callback回调函数。如果操作成功,返回行ID;否则返回-1。 |
+ | RdbStore | insert(table: string, values: ValuesBucket): Promise<number> | 向目标表中插入一行数据,结果以Promise形式返回。
- table:指定的目标表名。
- values:表示要插入到表中的数据行。 |
- **更新**
@@ -43,8 +43,8 @@
| 类名 | 接口名 | 描述 |
| -------- | -------- | -------- |
- | RdbStore | update(values: ValuesBucket, rdbPredicates: RdbPredicates, callback: AsyncCallback<number>):void | 根据RdbPredicates的指定实例对象更新数据库中的数据,结果以callback形式返回。
- values:以ValuesBucket存储的要更新的数据。
- rdbPredicates:表示RdbPredicates的实例对象指定的更新条件。
- callback:指定的callback回调方法。返回受影响的行数。 |
- | RdbStore | update(values: ValuesBucket, rdbPredicates: RdbPredicates): Promise\ | 根据RdbPredicates的指定实例对象更新数据库中的数据,结果以Promise形式返回。
- values:以ValuesBucket存储的要更新的数据。
- rdbPredicates:表示RdbPredicates的实例对象指定的更新条件。 |
+ | RdbStore | update(values: ValuesBucket, predicates: RdbPredicates, callback: AsyncCallback<number>):void | 根据RdbPredicates的指定实例对象更新数据库中的数据,结果以callback形式返回。
- values:以ValuesBucket存储的要更新的数据。
- predicates:表示RdbPredicates的实例对象指定的更新条件。
- callback:指定的callback回调方法。返回受影响的行数。 |
+ | RdbStore | update(values: ValuesBucket, predicates: RdbPredicates): Promise<number> | 根据RdbPredicates的指定实例对象更新数据库中的数据,结果以Promise形式返回。
- values:以ValuesBucket存储的要更新的数据。
- predicates:表示RdbPredicates的实例对象指定的更新条件。 |
- **删除**
@@ -54,8 +54,8 @@
| 类名 | 接口名 | 描述 |
| -------- | -------- | -------- |
- | RdbStore | delete(rdbPredicates: RdbPredicates, callback: AsyncCallback<number>):void | 根据rdbPredicates的指定实例对象从数据库中删除数据,结果以callback形式返回。
- rdbPredicates:RdbPredicates的实例对象指定的删除条件。
- callback:指定callback回调函数。返回受影响的行数。 |
- | RdbStore | delete(rdbPredicates: RdbPredicates): Promise\ | 根据rdbPredicates的指定实例对象从数据库中删除数据,结果以Promise形式返回。
- rdbPredicates:RdbPredicates的实例对象指定的删除条件。 |
+ | RdbStore | delete(predicates: RdbPredicates, callback: AsyncCallback<number>):void | 根据RdbPredicates的指定实例对象从数据库中删除数据,结果以callback形式返回。
- predicates:RdbPredicates的实例对象指定的删除条件。
- callback:指定callback回调函数。返回受影响的行数。 |
+ | RdbStore | delete(predicates: RdbPredicates): Promise<number> | 根据RdbPredicates的指定实例对象从数据库中删除数据,结果以Promise形式返回。
- predicates:RdbPredicates的实例对象指定的删除条件。 |
- **查询**
@@ -68,8 +68,8 @@
| 类名 | 接口名 | 描述 |
| -------- | -------- | -------- |
- | RdbStore | query(rdbPredicates: RdbPredicates, columns: Array, callback: AsyncCallback<ResultSet>): void | 根据指定条件查询数据库中的数据,结果以callback形式返回。
- rdbPredicates:表示RdbPredicates的实例对象指定的查询条件。
- columns:表示要查询的列。如果值为空,则查询应用于所有列。
- callback:指定callback回调函数。如果操作成功,则返回ResultSet对象。 |
- | RdbStore | query(rdbPredicates: RdbPredicates, columns: Array): Promise<ResultSet> | 根据指定条件查询数据库中的数据,结果以Promise形式返回。
- rdbPredicates:表示RdbPredicates的实例对象指定的查询条件。
- columns:表示要查询的列。如果值为空,则查询应用于所有列。 |
+ | RdbStore | query(predicates: RdbPredicates, columns: Array, callback: AsyncCallback<ResultSet>): void | 根据指定条件查询数据库中的数据,结果以callback形式返回。
- predicates:表示RdbPredicates的实例对象指定的查询条件。
- columns:表示要查询的列。如果值为空,则查询应用于所有列。
- callback:指定callback回调函数。如果操作成功,则返回ResultSet对象。 |
+ | RdbStore | query(predicates: RdbPredicates, columns: Array): Promise<ResultSet> | 根据指定条件查询数据库中的数据,结果以Promise形式返回。
- predicates:表示RdbPredicates的实例对象指定的查询条件。
- columns:表示要查询的列。如果值为空,则查询应用于所有列。 |
| RdbStore | querySql(sql: string, bindArgs: Array<ValueType>, callback: AsyncCallback<ResultSet>):void | 根据指定SQL语句查询数据库中的数据,结果以callback形式返回。
- sql:指定要查询的SQL语句。
- bindArgs:SQL语句中参数的值。
- callback:指定callback回调函数。如果操作成功,则返回ResultSet对象。 |
| RdbStore | querySql(sql: string, bindArgs?: Array<ValueType>):Promise<ResultSet> | 根据指定SQL语句查询数据库中的数据,结果以Promise形式返回。
- sql:指定要查询的SQL语句。
- bindArgs:SQL语句中参数的值。 |
@@ -188,6 +188,25 @@
| -------- | -------- | -------- |
| RdbStore |off(event:'dataChange', type: SubscribeType, observer: Callback\>): void;| 从数据库中删除指定类型的指定观察者,结果以callback形式返回。
- type:指在{@code SubscribeType}中定义的订阅类型;SUBSCRIBE_TYPE_REMOTE 订阅远程数据更改。
- observer:指已注册的数据更改观察者。 |
+### 数据库的备份和恢复
+
+**备份**
+
+**表13** 备份数据库
+
+| 类名 | 接口名 | 描述 |
+| -------- | -------- | -------- |
+| RdbStore |backup(destName:string, callback: AsyncCallback<void>):void| 以指定名称备份数据库,结果以callback形式返回。
- destName:指定数据库的备份文件名。
- callback:指定callback回调函数。 |
+| RdbStore |backup(destName:string): Promise<void>| 以指定名称备份数据库,结果以promise形式返回。
- destName:指定数据库的备份文件名。 |
+
+**恢复**
+
+**表14** 恢复数据库
+
+| 类名 | 接口名 | 描述 |
+| -------- | -------- | -------- |
+| RdbStore |restore(srcName:string, callback: AsyncCallback<void>):void| 从指定的数据库备份文件恢复数据库,结果以callback形式返回。
- srcName:指定数据库的备份文件名。
- callback:指定callback回调函数。 |
+| RdbStore |restore(srcName:string): Promise<void>| 从指定的数据库备份文件恢复数据库,结果以promise形式返回。
- srcName:指定数据库的备份文件名。 |
## 开发步骤
@@ -321,6 +340,29 @@
let tableName = rdbStore.obtainDistributedTableName(deviceId, "test");
let resultSet = rdbStore.querySql("SELECT * FROM " + tableName)
```
+8. 数据库的备份和恢复。
+ 1. 调用数据库的备份接口,备份当前数据库文件。
+ 2. 调用数据库的恢复接口,从数据库的备份文件恢复数据库文件。
+
+ 示例代码如下:
+
+ ```js
+ let promiseBackup = rdbStore.backup("dbBackup.db")
+ promiseBackup.then(()=>{
+ console.info('Backup success.')
+ }).catch((err)=>{
+ console.info('Backup failed, err: ' + err)
+ })
+ ```
+ ```js
+ let promiseRestore = rdbStore.restore("dbBackup.db")
+ promiseRestore.then(()=>{
+ console.info('Restore success.')
+ }).catch((err)=>{
+ console.info('Restore failed, err: ' + err)
+ })
+ ```
+
## 相关实例
针对关系型数据库开发,有以下相关实例可供参考:
- [`Rdb`:关系型数据库(eTS)(API8)](https://gitee.com/openharmony/app_samples/tree/master/data/Rdb)
diff --git a/zh-cn/device-dev/subsystems/subsys-data-relational-database-guide.md b/zh-cn/device-dev/subsystems/subsys-data-relational-database-guide.md
index ef830096d1e8f3c560035f3ae48b4329f4fc7c70..d45e6a2ed07e5eaffa4798504a231df1c3c0acde 100644
--- a/zh-cn/device-dev/subsystems/subsys-data-relational-database-guide.md
+++ b/zh-cn/device-dev/subsystems/subsys-data-relational-database-guide.md
@@ -155,6 +155,30 @@
| ---- | ---- | ---- |
| RdbStore | bool UnSubscribe(const SubscribeOption& option, RdbStoreObserver *observer) | 从数据库中删除指定类型的指定观察者。- option:订阅类型;
- observer:指已注册的数据更改观察者
+### 数据库的备份和恢复
+
+关系型数据库提供对本地数据库文件的备份和恢复能力,相关API如下所示。
+
+- 备份
+
+ 关系型数据库提供了备份数据库文件的接口,通过databasePath指定的备份文件名(支持路径)备份当前数据库文件。通过返回值判断是否备份成功,成功时返回0,失败时则返回相应的错误码。
+
+ 表11 数据库备份API
+
+ | 类名 | 接口名 | 描述 |
+ | ---- | ---- | ---- |
+ | RdbStore | int Backup(const std::string databasePath, const std::vector<uint8_t> destEncryptKey) | 备份数据库文件。- databasePath:指定的备份文件名。
- destEncryptKey:数据库的加密密钥。注意:当前只支持非加密数据库的备份。
|
+
+- 恢复
+
+ 关系型数据库提供了恢复数据库文件的接口,通过backupPath指定的备份文件名(支持路径)恢复当前数据库文件。通过返回值判断是否恢复成功,成功时返回0,失败时则返回相应的错误码。
+
+ 表12 数据库恢复API
+
+ | 类名 | 接口名 | 描述 |
+ | ---- | ---- | ---- |
+ | RdbStore | int Restore(const std::string backupPath, const std::vector<uint8_t> &newKey) | 恢复数据库文件。- backupPath:指定的备份文件名。
- newKey:数据库的加密密钥。注意:当前只支持非加密数据库的恢复。
|
+
## 约束与限制
无。
@@ -303,3 +327,17 @@
std::string tableName = store->ObtainDistributedTableName("123456789abcd", "test");
auto resultSet = store->QuerySql("SELECT * from ?;", tableName);
```
+
+8. 数据库的备份和恢复
+
+ a. 根据指定的数据库备份文件名备份当前数据库。
+
+ b. 根据指定的数据库备份文件恢复当前数据库。
+
+ 示例代码如下:
+ ```
+ std::string backupName = "backup.db"; // 指定数据库的备份文件名
+ std::vector key; // 数据库的加密密钥
+ int errno = store->Backup(backupName, key);
+ errno = store->Restore(backupName, key);
+ ```
\ No newline at end of file