鸿蒙OS relationalStore的初步使用

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);
    });
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值