HarmonyOS Next 数据库版本升级案例(1)

本文介绍了在HarmonyOS中进行数据库版本升级的一种方法,利用临时表进行数据迁移,并提供了一个通用的升级框架。此外,文章还分享了鸿蒙开发的学习路线,包括 ArkTS、ArkUI、分布式应用开发等多个领域的资源和教程,适合不同阶段的开发者学习。
摘要由CSDN通过智能技术生成
  1. 使用临时表方案,在升级时将旧表重命名为临时表,并创建一张与旧表未重命名前的名字相同的新表,分批次取出临时表中数据进行转换存入新表中,数据迁移完毕后删除临时表。源码参考DataService.ets
// 开启事务
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);
  1. 为方便扩展迭代,在父类中定义整体逻辑,子类只需继承父类,重写字段转换逻辑即可。源码参考DataService.ets
  /**
 * TODO: 知识点: 新老版本字段转换逻辑(版本升级只需要实现这个方法即可)
 * @param resultSet 查询结果集
 * @param targetVersion 目标版本
 * @returns 目标版本格式数据
 */
abstract transform(resultSet: relationalStore.ResultSet, targetVersion: number): ValuesBucket;
  1. 根据数据库当前版本和需升级至版本,选择对应的升级逻辑。源码参考DatabaseUpgrade.ets
switch (currentVersion) {
  case Constants.V1:
    await this.v1DataService.onUpgrade(version);
    break;
  case Constants.V2:
    a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值