本示例介绍使用关系型数据库的接口来进行数据库升降级场景实现
使用说明
数据库版本升级有两种方案
方案一:直接升级,需要实现各版本到目标版本的实现逻辑,优点在于性能好,缺点是逻辑复杂且较难维护。
方案二:一步一步升级到最新版本,只需要实现紧邻版本的升级逻辑,优点在于逻辑简单,便于维护,缺点在于比方案一性能差。
在本示例中两种方案都有体现,其中从V1->V2->V3用的方案二,从V1->V3使用的方案一,具体实现步骤如下:
// 开启事务
dbUtils.beginTransaction();
// 获取当前数据库版本
const oldVersion: number = dbUtils.getStoreVersion();
// 将旧表改为临时表
await dbUtils.updateTableName(Constants.STUDENT_TABLE, Constants.STUDENT_TABLE + oldVersion);
// 创建新表
const newTableColumnTypeMap: string[][] = CommonUtils.getTableColumnTypeMapByVersion(targetVersion);
await dbUtils.createTable(Constants.STUDENT_TABLE, newTableColumnTypeMap);
dbUtils.commit();
// 自定义迁移逻辑
let lastId: number = -1;
let flag: boolean = false;
await this.migrate(lastId, oldVersion, targetVersion, flag);
// 删除旧表
await dbUtils.dropTable(Constants.STUDENT_TABLE + oldVersion, targetVersion);
/**
* TODO: 知识点: 新老版本字段转换逻辑(版本升级只需要实现这个方法即可)
* @param resultSet 查询结果集
* @param targetVersion 目标版本
* @returns 目标版本格式数据
*/
abstract transform(resultSet: relationalStore.ResultSet, targetVersion: number): ValuesBucket;
欢迎大家关注公众号<程序猿百晓生>,可以了解到一下知识点。
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案)
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......
switch (currentVersion) {
case Constants.V1:
await this.v1DataService.onUpgrade(version);
break;
case Constants.V2:
await this.v2DataService.onUpgrade(version);
break;
default:
throw new Error('The database version to which you need to upgrade is incorrect');
}
不涉及
databaseupgrade // har类型
|---components
| |---CustomFormComponents.ets // 自定义表格组件
|---constants
| |---Constants.ets // 常量类
|---service
| |---DataService.ets // 业务层-版本升级逻辑
|---utils
| |---CommonUtils.ets // 工具类
| |---DBUtils.ets // 数据库操作封装
|---view
| |---DatabaseUpgrade.ets // 视图层-数据库版本升级案例交互界面
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。