Commit 743822e7 by ning

数据迁移

parent 5b4940dd
import rdb from '@ohos.data.relationalStore'
import { Logger } from '../utils/Logger'
/**
* 数据迁移类
*/
export class Migration {
/**
* 数据库名称
*/
private dbName: string = "";
/**
* 数据库表名
*/
private tableName: string = "";
/**
* 数据库版本(默认:1)
*/
private dbVersion: number = 1;
/**
* 对表进行修改的Alter语句(ALTER TABLE 语句用于在已有的表中添加、修改或删除列)
*/
private alters: string = "";
/**
* @param dbName 数据库名称
* @param tableName 表名称
* @param dbVersion 数据库版本
*/
constructor(dbName: string, tableName: string, dbVersion: number) {
this.tableName = tableName;
this.dbName = dbName;
this.dbVersion = dbVersion;
}
/**
* 新增列操作
*/
addColumn(columnName: string, columnType: string): any {
if (this.alters == "") {
this.alters = "alter table " + this.tableName + " add " + columnName + " " + columnType;
}
return this;
}
/**
* 修改列操作(需要修改的列名以及列数据类型名称,返回当前类实例)
*/
updateColumn(columnName: string, columnType: string): any {
if (this.alters == "") {
this.alters = "alter table " + this.tableName + " alter column " + columnName + " " + columnType;
}
return this;
}
/**
* 删除列操作(需要删除的列名,返回当前类实例)
*/
deleteColumn(columnName: string): any {
if (this.alters == "") {
this.alters = "alter table " + this.tableName + " drop column " + columnName;
}
return this;
}
/**
* 列操作
*/
Alter(alters: string): any {
if (this.alters != "") {
this.alters = ""
}
this.alters = alters;
return this;
}
/**
* 执行操作并升级数据库
* @param context
* @param encrypt
*/
public execute(context: any, encrypt: boolean): any {
let that = this;
rdb.getRdbStore(context, {
name: that.dbName,
securityLevel: rdb.SecurityLevel.S1,
encrypt: encrypt
}, (err, rdbStore) => {
if (err) {
Logger.info(this, '[数据迁移失败]|错误信息:' + err)
} else {
rdbStore.executeSql(that.alters, null, () => {
Logger.info(this, '数据迁移完成')
})
}
})
return this;
}
/**
* 异步执行操作并升级数据库
* @param context
* @param encrypt
*/
public async executeAsync(context: any, encrypt: boolean): Promise<any> {
let rdbStore: rdb.RdbStore = await rdb.getRdbStore(context, {
name: this.dbName,
securityLevel: rdb.SecurityLevel.S1,
encrypt: encrypt
})
await rdbStore.executeSql(this.alters, null);
Logger.info(this, '数据迁移完成')
return this;
}
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论