往期知识点整理

本示例介绍使用关系型数据库的接口来进行数据库升降级场景实现

效果预览图

使用说明

1. 加载完成后有版本升级以及版本恢复两种按钮

2. 点击版本升级下的”升级至V2“按钮,则数据库版本会从V1升级至V2,且在表格处显示V1和V2版本表格字段对比。

3. 点击版本升级下的”升级至V3“按钮,若当前是V1版本,则会执行V1升级至V3的逻辑,且在表格处显示V1和V3版本表格字段对比。

4. 版本恢复下的按钮会在升级至V1以上版本时可点击,如步骤二中升级至V2版本后,则”恢复到V1“按钮可点击,点击后数据库版本回退至V1版本

实现思路

数据库版本升级有两种方案

方案一:直接升级,需要实现各版本到目标版本的实现逻辑,优点在于性能好,缺点是逻辑复杂且较难维护。

方案二:一步一步升级到最新版本,只需要实现紧邻版本的升级逻辑,优点在于逻辑简单,便于维护,缺点在于比方案一性能差。

在本示例中两种方案都有体现,其中从V1->V2->V3用的方案二,从V1->V3使用的方案一,具体实现步骤如下:

1.使用临时表方案,在升级时将旧表重命名为临时表,并创建一张与旧表未重命名前的名字相同的新表,分批次取出临时表中数据进行转换存入新表中,数据迁移完毕后删除临时表。

// 开启事务

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);

2.为方便扩展迭代,在父类中定义整体逻辑,子类只需继承父类,重写字段转换逻辑即可。

/**

 * TODO: 知识点: 新老版本字段转换逻辑(版本升级只需要实现这个方法即可)

 * @param resultSet 查询结果集

 * @param targetVersion 目标版本

 * @returns 目标版本格式数据

 */

abstract transform(resultSet: relationalStore.ResultSet, targetVersion: number): ValuesBucket;

3.根据数据库当前版本和需升级至版本,选择对应的升级逻辑

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                           // 视图层-数据库版本升级案例交互界面

总是有很多小伙伴反馈说:鸿蒙开发不知道学习哪些技术?不知道需要重点掌握哪些鸿蒙开发知识点? 为了解决大家这些学习烦恼。在这准备了一份很实用的鸿蒙全栈开发学习路线与学习文档给大家用来跟着学习。

针对一些列因素,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植……等)技术知识点。

《鸿蒙 (Harmony OS)开发学习手册》(共计892页):https://gitcode.com/HarmonyOS_MN/733GH/overview

如何快速入门?

1.基本概念
2.构建第一个ArkTS应用
3.……

开发基础知识:

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

在这里插入图片描述

基于ArkTS 开发

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

在这里插入图片描述

鸿蒙开发面试真题(含参考答案):https://gitcode.com/HarmonyOS_MN/733GH/overview

在这里插入图片描述

OpenHarmony 开发环境搭建

图片

《OpenHarmony源码解析》:https://gitcode.com/HarmonyOS_MN/733GH/overview

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……
  • 系统架构分析
  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

图片

OpenHarmony 设备开发学习手册:https://gitcode.com/HarmonyOS_MN/733GH/overview

图片

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐