HarmonyOS鸿蒙Next中应用使用relationalStore创建了库和表,并且表中已有数据,新需求需要给表添加字段,怎样做比较简单易行?
HarmonyOS鸿蒙Next中应用使用relationalStore创建了库和表,并且表中已有数据,新需求需要给表添加字段,怎样做比较简单易行?
数据库版本升级可使用临时表方案,在升级时将旧表重命名为临时表,并创建一张与旧表未重命名前的名字相同的新表,分批次取出临时表中数据进行转换存入新表中,数据迁移完毕后删除临时表。
具体参考:数据库版本升级案例。
更多关于HarmonyOS鸿蒙Next中应用使用relationalStore创建了库和表,并且表中已有数据,新需求需要给表添加字段,怎样做比较简单易行?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
通过executeSql
方法执行ALTER TABLE
语句添加字段:
// 获取已创建的RdbStore对象后
store.executeSql(
"ALTER TABLE your_table_name ADD COLUMN new_column_name TEXT",
[],
(err: BusinessError) => {
if (err) {
console.error(`添加字段失败: ${err.code}, ${err.message}`);
} else {
console.info("字段添加成功");
}
}
);
创建/打开数据库时,提升 version,并在 onUpgrade 中执行一条 DDL
import {getTypeManager, StoreConfig} from '@ohos.data.relationalStore';
// 1)把 version 从 1 调到 2
const storeConfig: StoreConfig = {
name: 'mydb.db',
version: 2,
tables: [
{
name: 'user',
// 旧 schema + 新字段 newCol
columns: {
id: 'INTEGER PRIMARY KEY AUTOINCREMENT',
name: 'TEXT NOT NULL',
newCol: 'TEXT', // 新加的字段
}
}
],
onUpgrade: (db, oldVersion, newVersion) => {
if (oldVersion < 2) {
// 2)执行 ALTER TABLE
db.executeSql(`ALTER TABLE user ADD COLUMN newCol TEXT DEFAULT ''`);
}
}
};
// 打开即可触发 onUpgrade
const store = getTypeManager('database', storeConfig);
store.openOrCreate().then(db => {
console.info('升级成功');
}).catch(err => {
console.error('升级失败', err);
});
做个数据迁移功能,检测如果是旧版本或者表中没有该字段,则执行数据库DDL命令添加字段,这样不影响旧数据。
在HarmonyOS鸿蒙Next中,使用relationalStore给已有数据的表添加字段,可通过ALTER TABLE语句实现。具体操作为:在数据库升级回调onUpgrade中执行"ALTER TABLE 表名 ADD COLUMN 新字段名 数据类型"语句。注意需维护数据库版本号递增,系统会自动触发升级流程。此操作不会影响原有数据,新字段值为NULL或默认值。
在HarmonyOS Next中,使用relationalStore为已有数据的表添加新字段,可以通过以下步骤实现:
- 使用ALTER TABLE语句修改表结构:
await store.executeSql('ALTER TABLE 表名 ADD COLUMN 新字段名 字段类型');
- 完整示例代码:
import relationalStore from '@ohos.data.relationalStore';
// 获取已有RdbStore实例
let store = await relationalStore.getRdbStore(context, {
name: '数据库名.db'
});
try {
// 添加新字段
await store.executeSql('ALTER TABLE 表名 ADD COLUMN 新字段名 TEXT'); // TEXT可替换为其他类型
console.log('表结构更新成功');
} catch (err) {
console.error(`更新表结构失败: ${err}`);
}
注意事项:
- 新添加的字段对于已有记录会默认填充NULL值
- 如需设置默认值,可在语句中添加DEFAULT约束
- 支持添加的字段类型包括:INTEGER、TEXT、REAL、BLOB等
- 此操作不会影响表中已有数据
这种方法直接通过SQL语句修改表结构,是最简单高效的方案。