HarmonyOS 鸿蒙Next 关系型数据库如何增删表字段

HarmonyOS 鸿蒙Next 关系型数据库如何增删表字段 如题relationalStore数据库如何增删表字段 类似升级数据库的意思 就是更新已有表里的字段有可能删除 有可能增加

2 回复

可以执行对应的 SQL 语句实现:

因为可能存在跨多个版本升级,因此一般会逐个版本进行升级。

比如我们在 app 版本为 1 的时候创建了 user 表,数据库版本标记为 1,只有三个字段。

在 app 版本为 2 的时候增加了 email 字段,数据库版本标记为 2。

在 app 版本为 3 的时候增加了 age 字段 数据库版本标记为 3。

用户有可能从版本 1 直接升级到版本3。这时候对于数据库来讲需要增加两个字段:email 和 age。

因此建议是逐个版本升级

我们在获取到数据库对象之后,可以通过 version 字段判断数据库版本

store = await relationalStore.getRdbStore(context, STORE_CONFIG)
if(store.version == 1){
//执行 SQL ALTER TABLE users ADD COLUMN email TEXT;
store.version =2
}
if(store.version ==2){
//执行 SQL ALTER TABLE users ADD COLUMN age TEXT;
store.version =3
}

以上

更多关于HarmonyOS 鸿蒙Next 关系型数据库如何增删表字段的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,关系型数据库的增删表字段操作主要通过DataAbilityHelperRdbStore接口实现。以下是具体步骤:

新增表字段:

  • 使用ALTER TABLE语句在现有表中添加新字段。例如,要在user表中添加age字段,可以执行以下SQL语句:
    ALTER TABLE user ADD COLUMN age INTEGER;
    
  • 通过RdbStoreexecuteSql方法执行上述SQL语句。

删除表字段:

  • HarmonyOS的RDB不支持直接删除表字段。通常需要创建一个新表,复制旧表数据,删除旧表,然后将新表重命名为旧表名。例如:
    CREATE TABLE user_new (id INTEGER PRIMARY KEY, name TEXT);
    INSERT INTO user_new (id, name) SELECT id, name FROM user;
    DROP TABLE user;
    ALTER TABLE user_new RENAME TO user;
    
  • 通过RdbStoreexecuteSql方法依次执行上述SQL语句。

更新数据库版本:

  • RdbOpenCallbackonUpgrade方法中处理表结构变更。当数据库版本升级时,系统会自动调用此方法。

示例代码:

import relationalStore from '@ohos.data.relationalStore';

let store;
const config = {
  name: 'myDB.db',
  securityLevel: relationalStore.SecurityLevel.S1
};

relationalStore.getRdbStore(this.context, config, (err, rdbStore) => {
  if (err) {
    console.error(`Failed to get RdbStore. Code:${err.code}, message:${err.message}`);
    return;
  }
  store = rdbStore;

  // 新增字段
  store.executeSql('ALTER TABLE user ADD COLUMN age INTEGER', null, (err) => {
    if (err) {
      console.error(`Failed to add column. Code:${err.code}, message:${err.message}`);
    }
  });

  // 删除字段(间接)
  store.executeSql('CREATE TABLE user_new (id INTEGER PRIMARY KEY, name TEXT)', null, (err) => {
    if (err) {
      console.error(`Failed to create new table. Code:${err.code}, message:${err.message}`);
      return;
    }
    store.executeSql('INSERT INTO user_new (id, name) SELECT id, name FROM user', null, (err) => {
      if (err) {
        console.error(`Failed to copy data. Code:${err.code}, message:${err.message}`);
        return;
      }
      store.executeSql('DROP TABLE user', null, (err) => {
        if (err) {
          console.error(`Failed to drop old table. Code:${err.code}, message:${err.message}`);
          return;
        }
        store.executeSql('ALTER TABLE user_new RENAME TO user', null, (err) => {
          if (err) {
            console.error(`Failed to rename table. Code:${err.code}, message:${err.message}`);
          }
        });
      });
    });
  });
});
回到顶部