实现实路
1.为什么封装
因为在使用鸿蒙实现多个表和实体类进行操作时,发现如果用官方的教程要多谢好多一样的代码,所以出于"偷懒"就有了开发封装类的想法。
2.封装思路
1.先把数据库的名字和等级定住
const STORE_CONFIG: relationalStore.StoreConfig = {
name: "smart_home.db",//数据库名
securityLevel: relationalStore.SecurityLevel.S1//数据库安全等级
};
2.在**Ability (**是看你的模块名)进行初始化
static async init() {
if (!DBUtils.context) {//初始化前需要先设置上下文
Logger.error("数据库初始化失败,没有设置context")
return
}
//这里开始初始化
relationalStore.getRdbStore(DBUtils.context, STORE_CONFIG).then(async (rdbStore: relationalStore.RdbStore) => {
DBUtils.store = rdbStore;
// Logger.info("数据库初始化成功");
let flay = await PreferencesUtils.get("initDB", 0)//这里调用了首选项的工具类
if (flay == 0) {
//这里执行建表sql语句
for (let i = 0; i < DBUtils.SQL_LIST.length; i++) {
rdbStore.executeSql(DBUtils.SQL_LIST[i]).then(() => {
// Logger.info("数据库表创建成功");
PreferencesUtils.set("initDB", 1)
}).catch((err: BusinessError) => {
Logger.error(i + "数据库表创建失败" + JSON.stringify(err));
})
}
}
}).catch((err: BusinessError) => {
Logger.error("数据库初始化失败" + JSON.stringify(err));
return
})
}
注意:首选项工具类,我进行了封装,具体实现,鸿蒙5.0(API12)首选项封装类实现-优快云博客
sql语句最好是写在string.json文件里(这里是图方便)
3.查询的结果映射
private static selectChangeValuesBucket<T extends object>(v: relationalStore.ValuesBucket): T {
let c: object = new Object() as T
let o = Object.keys(v)//拿到所有的