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中,关系型数据库的增删表字段操作主要通过DataAbilityHelper
和RdbStore
接口实现。以下是具体步骤:
新增表字段:
- 使用
ALTER TABLE
语句在现有表中添加新字段。例如,要在user
表中添加age
字段,可以执行以下SQL语句:ALTER TABLE user ADD COLUMN age INTEGER;
- 通过
RdbStore
的executeSql
方法执行上述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;
- 通过
RdbStore
的executeSql
方法依次执行上述SQL语句。
更新数据库版本:
- 在
RdbOpenCallback
的onUpgrade
方法中处理表结构变更。当数据库版本升级时,系统会自动调用此方法。
示例代码:
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}`);
}
});
});
});
});
});