基于鸿蒙OS4的关系数据库使用学习——以简易版备忘录为例

概述

这里是我的项目地址,欢迎大家下载参考~有问题欢迎互相指出,谢谢!!
项目gitee地址

丑化说在前头,这个备忘录真的是十分简陋,这一篇的写作目的不是为了能告诉读者备忘录怎么写和怎么美化,而是希望在现有鸿蒙OS4关系型数据库教学还比较少的情况下,官网教学也比较简陋,把复杂的数据库设置抽离出来,让大家少走点弯路,让大家能更快的利用关系型数据库实现自己想要的业务目标。

笔者走了很多弯路了呜呜,希望大家多多点赞收藏~~

废话不多说,开干!!

这个学习案例,主要是参考b站大佬的备忘录设计和华为开发者官网的例子记账本,大家也可以在了解基本关系型数据库怎么设置后具体学习

我们主要/scr/main的目录结构如下:

../scr/main目录下文件树结构展示
.
|-- constants
|   `-- CommonConstants.ets
|-- database
|   |-- MemoTable.ets
|   `-- Rdb.ets
|-- ets
|   |-- component
|   |   `-- MemoItem.ets
|   |-- entryability
|   |   `-- EntryAbility.ts
|   `-- pages
|       `-- Index.ets
|-- model
|   |-- MemoModel.ets
|   `-- TableInterface.ets
|-- module.json5
|-- resources
|   |-- base
|   |   |-- element
|   |   |   |-- color.json
|   |   |   `-- string.json
|   |   |-- media
|   |   |   `-- icon.png
|   |   `-- profile
|   |       `-- main_pages.json
|   |-- en_US
|   |   `-- element
|   |       `-- string.json
|   |-- rawfile
|   `-- zh_CN
|       `-- element
|           `-- string.json
`-- utils
    `-- Logger.ets

数据库的配置

我们先配置数据库
./main/constants目录下,创建CommonConstants.ets文件,在这个文件里,我们存放Rdb数据库的基本配置,具体跟官网样例也差不多

import relationalStore from '@ohos.data.relationalStore'
import {
    MemoTable } from '../model/TableInterface'

export default class CommonConstants {
   

  // Rdb 数据库配置
  static readonly STORE_CONFIG:relationalStore.StoreConfig = {
   
    name:'database.db',
    securityLevel:relationalStore.SecurityLevel.S1
  }

  static readonly MEMO_TABLE:MemoTable = {
   
    tableName:'memoTable',
    sqlCreate:'CREATE TABLE IF NOT EXISTS memoTable(id INTEGER PRIMARY KEY AUTOINCREMENT, updateTime INTEGER, content TEXT)',
    columns:['id','updateTime','content']
  }

  // 一些日志控制参数
  static readonly RDB_TAG = '[Debug.Rdb]';
  static readonly TABLE_TAG = '[Debug.memoTable]';
  static readonly INDEX_TAG = '[Debug.Index]';

}

我在学习的时候注意到,大佬在/main/model目录下,设置了TableInterface.ets文件,存放了一个MeMoTable接口
这种接口的设置,不用设置关键词function,我认识到可能一个是为了给CommonConstants类中的MEMO_TABLE内部元素设置类型,一个是降低代码耦合度便于后面维护

/main/model目录下,新建TableInterface.ets文件,写一个MeMoTable接口

```typescript
export interface MemoTable {
  tableName: string
  sqlCreate: string
  columns: string[]
}

本来的定义如下

interface 接口名{
   
    接口代码:一般定义规则、方法等
    方法名(形参:形参类型):方法返回值
}

进一步,大佬对数据库的操作进行了一层抽象,这个抽象的意思就是把很复杂的操作用几个函数给你概括起来了

就像我们如果形容一辆车,我们本来按照比较机械的方法,要定义外壳轮廓、动力参数什么的,现在直接告诉你小轿车、发动机V8什么的,你就大概了解了,我想后者就是抽象,把复杂的东西简单化

/main/database目录下,新建Rdb.ets文件,这个文件就是负责抽象复杂的数据库操作方法,不用来实现具体业务,只规定获取rdbStore对象,并用哪张表增删改查之类的流程
我们后续要使用数据库的数据操作时,数据操作也被简化为getRdbStore, insertData, deleteData, updateData, query方法

import relationalStore from '@ohos.data.relationalStore';
import CommonConstants from '../constants/CommonConstants';
import Logger from '../utils/Logger';

// 抽象的Rdb类,没有业务属性,可以基于这个类创建带有业务属性的一张或多张表

export default class Rdb {
   

  // 管理关系数据库(RDB)方法属性 类型是RdbStore 或 null
  private rdbStore: relationalStore.RdbStore | null = null;

  // 数据库表名称
  private tableName: string;

  // 创建SQLite表的语句字符串
  private sqlCreateTable: string;

  // 列名字段的数组
  private columns: Array<string>;

  // 实例化 Rdb 对象时,初始化表名、创建表的语句、列名字段的数组
  constructor(tableName: string, sqlCreateTable: string, columns: Array<string>) {
   
    this.tableName = tableName;
    this.sqlCreateTable = sqlCreateTable;
    this.columns = columns;
  }

  // 获取操作数据库RdbStore对象的方法,接收一个回调函数
  getRdbStore(callback: Function = () => {
   
  }) {
   
    // 如果 回调函数为空、或undefined 打印错误日志,退出方法
    if (!callback || typeof callback === 'undefined' || callback === undefined) {
   
      Logger.info(CommonConstants.RDB_TAG, 'getRdbStore() has no callback!');
      return;
    }

    // 如果属性rdbStore 不为空,说明操作对象已经初始化,打印日志,执行回调函数,退出方法
    if (this.rdbStore !== null) {
   
      Logger.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值