鸿蒙开发———黑马健康app(数据模型DB工具)

创建 DbUtil 类的一个实例在 initDB 方法中,设置数据库的配置,包括数据库文件名和安全等级,然后调用 relationalStore.getRdbStore 方法获取数据库存储实例。使用 initDB 方法初始化数据库。这个方法接收一个 UIAbilityContext 类型的参数,用于获取应用的上下文信息。使用 createTable 方法执行 SQL 语句来创建表。接收一个 SQL 字符串参数,该字符串包含创建表的 SQL 语句。使用 insert 方法向数据库表中插入数据。接收表名、要插入的数据对象以及列信息数组作为参数。使用 delete 方法根据给定的条件删除数据。这个方法接收一个 RdbPredicates 对象,该对象包含删除条件。使用 queryForList 方法查询数据库表中的数据。这个方法接收查询条件和列信息数组作为参数,并返回一个泛型列表。parseResultSet 方法用于将查询结果集解析为 JavaScript 对象数组。这个方法遍历结果集的每一行,并根据列信息将数据转换为对象。buildValueBucket 方法用于构建用于插入或更新操作的数据对象。它根据给定的数据对象和列信息数组创建一个键值对集合。在执行数据库操作的过程中,使用 Logger 记录关键的日志信息,以便于调试和追踪程序的运行状态。在执行数据库操作时,处理出现的错误,如 SQL 语法错误、违反数据约束、数据库连接问题等。在不再需要数据库操作时,释放相关资源,关闭数据库连接。


import common from '@ohos.app.ability.common';

import relationalStore from '@ohos.data.relationalStore';

import { ColumnInfo, ColumnType } from '../bean/ColumnInfo';

import Logger from './Logger';

const DB_FILENAME: string = 'HeiMaHealthy.db';


class DbUtil {
  // 类成员变量 rdbStore,用于存储关系型数据库存储实例。
  rdbStore: relationalStore.RdbStore;

  // initDB 方法用于初始化数据库,接收一个 UIAbilityContext 类型的参数 context。
  initDB(context: common.UIAbilityContext): Promise<void> {
    // 定义数据库配置对象 config。
    let config: relationalStore.StoreConfig = {
      name: DB_FILENAME, // 设置数据库文件名。
      securityLevel: relationalStore.SecurityLevel.S1 // 设置数据库的安全等级。
    };
    // 返回一个 Promise 对象,用于异步处理数据库初始化。
    return new Promise<void>((resolve, reject) => {
      // 调用 getRdbStore 方法获取关系型数据库存储实例。
      relationalStore.getRdbStore(context, config)
        .then(rdbStore => {
          // 初始化成功,将实例赋值给类成员变量 rdbStore 并记录日志。
          this.rdbStore = rdbStore;
          Logger.debug('rdbStore 初始化完成!');
          resolve(); // 解决 Promise。
        })
        .catch(reason => {
          // 初始化失败,记录日志并拒绝 Promise。
          Logger.debug('rdbStore 初始化异常', JSON.stringify(reason));
          reject(reason);
        });
    });
  }

  // createTable 方法用于执行创建表的 SQL 语句。
  createTable(createSQL: string): Promise<void> {
    return new Promise((resolve, reject) => {
      // 使用 rdbStore 的 executeSql 方法执行传入的创建表 SQL 语句。
      this.rdbStore.executeSql(createSQL)
        .then(() => {
          // 创建表成功,记录日志并解决 Promise。
          Logger.debug('创建表成功', createSQL);
          resolve();
        })
        .catch(err => {
          // 创建表失败,记录错误日志并拒绝 Promise。
          Logger.error('创建表失败,' + err.message, JSON.stringify(err));
          reject(err);
        });
    });
  }

  // insert 方法用于向指定表中插入数据。
  insert(tableName: string, obj: any, columns: ColumnInfo[]): Promise<number> {
    return new Promise((resolve, reject) => {
      // 构建用于插入的数据对象。
      let value = this.buildValueBucket(obj, columns);
      // 调用 rdbStore 的 insert 方法将数据插入到指定表中。
      this.rdbStore.insert(tableName, value, (err, id) => {
        if (err) {
          // 插入失败,记录错误日志并拒绝 Promise。
          Logger.error('新增失败!', JSON.stringify(err));
          reject(err);
        } else {
          // 插入成功,记录日志并解决 Promise,返回新插入数据的 ID。
          Logger.debug('新增成功!新增id:', id.toString());
          resolve(id);
        }
      });
    });
  }

  // delete 方法用于根据条件删除数据。
  delete(predicates: relationalStore.RdbPredicates): Promise<number> {
    return new Promise((resolve, reject) => {
      // 调用 rdbStore 的 delete 方法根据 predicates 条件删除数据。
      this.rdbStore.delete(predicates, (err, rows) => {
        if (err) {
          // 删除失败,记录错误日志并拒绝 Promise。
          Logger.error('删除失败!', JSON.stringify(err));
          reject(err);
        } else {
          // 删除成功,记录日志并解决 Promise,返回被删除的行数。
          Logger.debug('删除成功!删除行数:', rows.toString());
          resolve(rows);
        }
      });
    });
  }

  // queryForList 方法用于查询数据并返回一个泛型列表。
  queryForList<T>(predicates: relationalStore.RdbPredicates, columns: ColumnInfo[]): Promise<T[]> {
    return new Promise((resolve, reject) => {
      // 调用 rdbStore 的 query 方法执行查询操作。
      this.rdbStore.query(predicates, columns.map(info => info.columnName), (err, result) => {
        if (err) {
          // 查询失败,记录错误日志并拒绝 Promise。
          Logger.error('查询失败!', JSON.stringify(err));
          reject(err);
        } else {
          // 查询成功,记录日志并解析结果集。
          Logger.debug('查询成功!查询行数:', result.rowCount.toString());
          resolve(this.parseResultSet(result, columns));
        }
      });
    });
  }

  // parseResultSet 方法用于解析查询结果集,将其转换为对象数组。
  parseResultSet<T> (result: relationalStore.ResultSet, columns: ColumnInfo[]): T[] {
    // 声明最终返回的结果数组。
    let arr = [];
    // 判断是否有结果。
    if (result.rowCount <= 0) {
      return arr;
    }
    // 处理结果集中的每一行。
    while (!result.isAtLastRow) {
      // 移动到结果集的下一行。
      result.goToNextRow();
      // 初始化一个对象用于存储当前行的数据。
      let obj = {};
      columns.forEach(info => {
        let val = null;
        // 根据列的数据类型获取对应数据。
        switch (info.type) {
          case ColumnType.LONG:
            val = result.getLong(result.getColumnIndex(info.columnName));
            break;
          case ColumnType.DOUBLE:
            val = result.getDouble(result.getColumnIndex(info.columnName));
            break;
          case ColumnType.STRING:
            val = result.getString(result.getColumnIndex(info.columnName));
            break;
          case ColumnType.BLOB:
            val = result.getBlob(result.getColumnIndex(info.columnName));
            break;
        }
        obj[info.name] = val;
      });
      // 将对象添加到结果数组。
      arr.push(obj);
      // 记录当前查询到的数据。
      Logger.debug('查询到数据:', JSON.stringify(obj));
    }
    return arr;
  }

  // buildValueBucket 方法用于根据给定的对象和列信息数组构建一个键值对的集合。
  buildValueBucket(obj: any, columns: ColumnInfo[]): relationalStore.ValuesBucket {
    let value = {};
    columns.forEach(info => {
      let val = obj[info.name];
      // 如果值存在且不是 undefined,则将其添加到 value 对象中。
      if (typeof val !== 'undefined') {
        value[info.columnName] = val;
      }
    });
    return value;
  }
}

// 创建 DbUtil 类的实例。
let dbUtil: DbUtil = new DbUtil();

// 将 dbUtil 实例作为默认导出,使用类型断言确保其类型为 DbUtil。
export default dbUtil as DbUtil;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员的tb_brand是指在JavaWeb基础教程中创建的一个表。这个表是用来存储品牌信息的,具体的表结构和数据类型需要和JavaBean类中的成员变量保持一致。\[1\]在这个教程中,使用了Maven来构建项目,并且使用了MyBatis作为持久层框架,通过配置pom.xml文件来引入相关依赖。\[2\] Maven是一个用于管理和构建Java项目的工具,它提供了一套标准化的项目结构、构建流程和依赖管理机制。\[3\] #### 引用[.reference_title] - *1* [【JAVAWEB开发黑马程序员java web案例资料(含Element的删除与修改)](https://blog.csdn.net/aasd23/article/details/126940147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [黑马程序员-MyBatis 框架-最全入门笔记、阿伟看了都得说真大、真细、真全!!!](https://blog.csdn.net/qq_57383364/article/details/128103058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [JavaWeb——黑马程序员课程笔记](https://blog.csdn.net/King_ZACC/article/details/128573804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值