export default class RdbUtils{
static store: relationalStore.RdbStore | null = null;
static isInitialized: boolean = false;
static initPromise: Promise<void> | null = null;
// 初始化数据库
static initDB(context: common.UIAbilityContext): Promise<void> {
let config: relationalStore.StoreConfig = {
name: "RdbWeather.db",
securityLevel: relationalStore.SecurityLevel.S1,
};
if (RdbUtils.isInitialized && RdbUtils.store) {
// 已经初始化了
return Promise.resolve();
}
if (RdbUtils.initPromise) {
// 初始化过程已经在进行中
return RdbUtils.initPromise;
}
RdbUtils.initPromise = new Promise<void>((resolve, reject) => {
relationalStore.getRdbStore(context, config)
.then(rdbStore => {
RdbUtils.store = rdbStore;
console.log(" 数据库 初始化完成!");
return RdbUtils.createTable();
})
.then(() => {
RdbUtils.isInitialized = true;
resolve();
})
.catch((error: string) => {
console.log(" 数据库 rdbStore 初始化异常!" + JSON.stringify(error));
reject(error);
})
.finally(() => {
RdbUtils.initPromise = null; // 清除Promise避免循环依赖
});
});
return RdbUtils.initPromise;
}
static getStore(): relationalStore.RdbStore {
if (!RdbUtils.store) {
throw new Error(" 数据库未初始化");
}
return RdbUtils.store;
}
static executeSql(sql: string): Promise<void> {
return RdbUtils.getStore().executeSql(sql);
}
static createTable(): Promise<void> {
const createTableSql = `
CREATE TABLE IF NOT EXISTS EMPLOYEE
(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
LocationID TEXT,
NAME TEXT NOT NULL,
ADM TEXT)`;
return RdbUtils.executeSql(createTableSql)
.then(() => {
console.info('数据库 Table "EMPLOYEE" 创建成功。');
});
}
}
// 新增数据
const valBucket: ValuesBucket = {
'LocationID':cityId,
'NAME': cityName,
'ADM': cityStr,
}
RdbUtils.getStore().insert('EMPLOYEE', valBucket, (err, rowId) => {
if (err) {
console.log(`数据库 data.插入失败 Code:${err.code}, message:${err.message}`);
return;
}
onCityClick(cityId)
console.log(`数据库 .插入成功 rowId:${rowId}`);
})
// TODO: 删除
delete(locationID: string, callback?: (isDeleted: boolean) => void) {
let predicates = new relationalStore.RdbPredicates('EMPLOYEE');
predicates.equalTo("LocationID", locationID);
RdbUtils.getStore().delete(predicates, (err, rows) => {
if (err) {
// 删除失败
callback && callback(false);
return;
}
// 删除成功
callback && callback(true);
});
}