HarmoneyOS数据库基本操作

        HarmoneyOS的关系型数据库基于SQLite组件,适用于存储包含复杂关系数据的场景,比如一个班级的学生信息,需要包括姓名、学号、各科成绩等,又或者公司的雇员信息,需要包括姓名、工号、职位等,由于数据之间有较强的对应关系,复杂程度比键值型数据更高,此时需要使用关系型数据库来持久化保存数据。

机制关系如下图

        但是内置的数据库限制较多,最大的一条限制就是插入数据不能超过2MB,超过这个大小,插入成果,读取失败。

        其他的限制则包括

        1、支持的基本数据类型:number、string、二进制类型数据、boolean。

        2、同一时间只能支持一个写操作

        3、数据库中4个读连接和1个写链接,线程获取到空闲读连续时,即可以进行读取操作。当没有空闲读连接且有空闲写连接时,会将写连接当做读连接来使用。

        嗯,那我们首先试试封装一个属于自己的HarmoneyOS数据库吧。

1、导入模块

import { relationalStore } from '@kit.ArkData' //关系型数据库模块
import { promptAction } from '@kit.ArkUI'      //提示模块

2、创建数据库

        在这一步之前呢得用一个类将其包裹起来,我这用的名字,就用PrivacyDB了。

class PrivacyDB{ 
private store: relationalStore.RdbStore | null = null   //操作实例
  // 指定表格的名称
  private tableName = 'PRIVACY_NOTE'

  //创建数据库
  async CreateDateBase() {

    try {
      this.store = await relationalStore.getRdbStore(getContext(), {
        name: this.tableName, // 数据库名称
        securityLevel: relationalStore.SecurityLevel.S1 // 安全等级
      })
      promptAction.showToast({ message: "数据库创建成功" })
    } catch (e) {
      promptAction.showToast({ message: "数据库创建失败" + e.message })
    }
  }
}

3、创建数据表

        既然有库,那肯定要有表,在这里呢,我的表名在上面就已经声明结束了,所以直接调用即可,而对于创建表内的KEY主键操作字段,与Mysql很类似。

async createTable() {      //异步返回
    try {
      const store = await this.getRdbStore()
      const sqlCreatteTable = `CREATE TABLE IF NOT EXISTS ${this.tableName} (
          id INTEGER PRIMARY KEY AUTOINCREMENT,          //表内字段,id表示编号,自增
          title TEXT NOT NULL,                           //title表示标题,必填
          content TEXT NOT NULL,                         //content表示内容非空,必填   
          date_added INTEGER NOT NULL                    //date_added持续时间整型非空,必填
        )`
      //   2 执行 sql 创建数据表
      //RdbStore
      // 提供管理关系数据库(RDB)方法的接口。
      //
      // 在使用以下相关接口前,请使用executeSql接口初始化数据库表结构和相关数据。
      await store.executeSql(sqlCreatteTable)
      return true
    } catch (e) {
      return false
    }
  }

4、查询全部数据

// 返回值 查询不到 返回数组 空数组
  async query() {
    try {
      const store = await this.getRdbStore()   
//getRdbStore获得一个相关的RdbStore,操作关系型数据库
      const predicates = new relationalStore.RdbPredicates(this.tableName)
//RdbPredicates表示关系型数据库(RDB)的谓词。该类确定RDB中条件表达式的值是true还是false。
      const resultSet = await store.query(predicates)
//query表示查询
      const list: PrivacyNoteDBInfo[] = []
//假设存在一个列表用于存储数据,只要存在就不断往下一行查询并放入
      while (resultSet.goToNextRow()) {
        const data: PrivacyNoteDBInfo = {
          id: resultSet.getLong(resultSet.getColumnIndex("id")),
          title: resultSet.getString(resultSet.getColumnIndex("title")),
          content: resultSet.getString(resultSet.getColumnIndex("content")),
          date_added: resultSet.getLong(resultSet.getColumnIndex("date_added")),
        }

        list. Push(data)
      }
      resultSet.close()

      return list
    } catch (e) {
      return []
    }
  }

插入一条数据

async insert(item: PrivacyNoteDBInfo) {
    const store = await this.getRdbStore()
    const rowId = await store.insert(this.tableName, item)
//item可替换为
// const date: PrivacyNoteDBInfo = {
//     id: null,
//      title: '隐私笔记' + Date.now(),
//      content: '笔记内容' + Date.now(),
//      date_added: Date.now()
//    }
    return rowId !== -1 ? true : false

  }

当然,还有很多的数据库操作,排序,更改,匹配等,都可以基于这个自己的数据库来拓展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值