HarmonyOS Next数据持久化

HarmonyOS Next数据持久化

HarmonyOS Next数据持久化主要包括用户首选项和关系型数据库。用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。关系型数据库(Relational Database,RDB)是一种基于关系模型来管理数据的数据库。关系型数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查等接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需要。

用户首选项

  1. 封装工具类用户初始化首选项和操作数据(/src/main/ets/utils/PreferenceUtil.ts)。
import preferences from '@ohos.data.preferences';
import { hilog } from '@kit.PerformanceAnalysisKit';

class PreferencesUtil {
  prefMap: Map<string, preferences.Preferences> = new Map()

  async loadPreferences(context, name: string) {
    try {
      const pref = await preferences.getPreferences(context, name)
      this.prefMap.set(name, pref)
      hilog.info(0x0000, 'preferences', '首选项实例加载成功');
    } catch (err) {
      hilog.info(0x0000, 'preferences', '首选项实例加载失败', JSON.stringify(err));
    }
  }

  // 新增数据
  async putPreferences(name: string, key: string, value: preferences.ValueType) {
    try {
      if (!this.prefMap.has(name)) {
        hilog.info(0x0000, 'preferences', '未初始化首选项实例');
        return
      }
      const pref = this.prefMap.get(name)
      await pref.put(key, value)
      await pref.flush()
      hilog.info(0x0000, 'preferences', `首选项实例${name}写入数据${key}=${value}成功`);
    } catch (e) {
      hilog.info(0x0000, 'preferences', '首选项实例写入数据失败', JSON.stringify(e));
    }
  }

  // 删除数据
  async deletePreferences(name: string, key: string) {
    try {
      if (!this.prefMap.has(name)) {
        hilog.info(0x0000, 'preferences', '未初始化首选项实例');
        return
      }
      const pref = this.prefMap.get(name)
      await pref.delete(key)
      hilog.info(0x0000, 'preferences', `首选项实例${name}删除数据${key}成功`);
    } catch (e) {
      hilog.info(0x0000, 'preferences', '首选项实例删除数据失败', JSON.stringify(e));
    }
  }

  // 查找数据
  async getPreferences(name: string, key: string, defaultValue: preferences.ValueType) {

    try {
      if (!this.prefMap.has(name)) {
        hilog.info(0x0000, 'preferences', '未初始化首选项实例');
        return
      }
      const pref = this.prefMap.get(name)
      const prefValue = await pref.get(key, defaultValue)
      hilog.info(0x0000, 'preferences', `首选项实例${name}查找数据${key}=${prefValue}成功`);
      return prefValue
    } catch (e) {
      hilog.info(0x0000, 'preferences', '首选项实例查找数据失败', JSON.stringify(e));
    }
  }
}

export default new PreferencesUtil() as PreferencesUtil
  1. 初始化首选项实例(src/main/ets/entryability/EntryAbility.ets)。
async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    // 初始化首选项实例
    await PreferenceUtil.loadPreferences(this.context, 'ThemePreferences')
  }

关系型数据库

  1. 封装工具类初始化关系型数据库和操作数据(/src/main/ets/utils/SqlUtil.ts)。
import { relationalStore } from '@kit.ArkData';
import { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import JueJinCommentItem from '../viewmodel/JueJinCommentItem'
import { util } from '@kit.ArkTS';
import { DateUtil } from '@pura/harmony-utils';

class JueJinSqlUtil {
  private rdbStore?: relationalStore.RdbStore
  private tableName: string = 'jue_jin_comment'
  private tableColumns: string[] = [
    'comment_id',
    'avatar',
    'grade',
    'username',
    'comment_time',
    'comment_content',
    'is_thumb',
    'thumb_count',]

  // 初始化sql
  initCommentDB(context: common.BaseContext) {
    const cTableSql = `CREATE TABLE IF NOT EXISTS jue_jin_comment (
                        comment_id TEXT PRIMARY KEY,
                        avatar TEXT NOT NULL,
                        grade INTEGER NOT NULL,
                        username TEXT NOT NULL,
                        comment_time TEXT NOT NULL,
                        comment_content TEXT NOT NULL,
                        is_thumb INTEGER NOT NULL,
                        thumb_count INTEGER NOT NULL
                    );`
    relationalStore.getRdbStore(context, {
      name: 'JueJinCommentSql.db',
      securityLevel: relationalStore.SecurityLevel.S1
    }, (err: BusinessError, data: relationalStore.RdbStore) => {
      if (err) {
        hilog.info(0x0000, 'commentDB', '初始化数据库失败')
        return
      }
      data.executeSql(cTableSql)
      this.rdbStore = data
      hilog.info(0x0000, 'commentDB', 'jue_jin_comment表创建成功')
    })
  }

  // 新增数据
  addComment(commentContent: string): Promise<number> {
    return this.rdbStore!.insert(this.tableName,数据)
  }

  // 删除数据(删除表字段id=commentId的记录)
  deleteComment(commentId: string) {
    let predicates = new relationalStore.RdbPredicates(this.tableName)
    predicates.equalTo('comment_id', commentId)
    this.rdbStore!.delete(predicates)
    hilog.info(0x0000, 'commentDB', '表数据删除成功')
  }

  // 更新数据(点赞)
  updateCommentThumb(commentId: string, isThumb: boolean, thumbCount: number) {
    let predicates = new relationalStore.RdbPredicates(this.tableName)
    predicates.equalTo('comment_id', commentId)
    const value: relationalStore.ValuesBucket =
      { 'is_thumb': isThumb ? 0 : 1, 'thumb_count': isThumb ? thumbCount - 1 : thumbCount + 1 }
    hilog.info(0x0000, 'commentDB', 'jue_jin_comment表数据更新成功')
    return this.rdbStore!.update(value, predicates)
  }

  // 查询所有数据
  async getComment(): Promise<JueJinCommentItem[]> {
    let predicates = new relationalStore.RdbPredicates(this.tableName)
    let result = await this.rdbStore!.query(predicates, this.tableColumns)
    let arr: JueJinCommentItem[] = []
    while (!result.isAtLastRow) {
      result.goToNextRow()
      arr.push() // 根据实际需求push
    }
    hilog.info(0x0000, 'commentDB', 'jue_jin_comment表数据查询成功')
    return arr
  }
}

export default new SqlUtil() as SqlUtil
  1. 初始化关系型数据库实例(src/main/ets/entryability/EntryAbility.ets)。
import SqlUtil from '../utils/SqlUtil'

async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    // 初始化sql
    JueJinSqlUtil.initCommentDB(this.context)
  }
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lewiis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值