写点什么

HarmonyOSNext 全栈数据存储双星解析:轻量级 VS 关系型存储终极指南

作者:Turing_010
  • 2025-06-07
    广东
  • 本文字数:2085 字

    阅读完需:约 7 分钟

HarmonyOSNext全栈数据存储双星解析:轻量级VS关系型存储终极指南

##Harmony OS Next ##Ark Ts ##教育


本文适用于教育科普行业进行学习,有错误之处请指出我会修改。


🌠一招鲜吃遍天!用户首选项使用全攻略🌠



🎯场景定位:轻量存储小能手

  • 核心能力:Key-Value 键值存储(像小本本记笔记一样方便!)

  • 最佳拍档:字体大小/夜间模式等个性化设置

  • 不适合:大数据存储(超过 1 万条会变胖哦!)、敏感数据加密

  • 🌟 必杀技:内存缓存加速 + 按需持久化(flush 一下全搞定)



🚀运作三连拍

// 1️⃣ 获取实例(就像打开笔记本)let options: preferences.Options = { name: 'myStore' };dataPreferences = preferences.getPreferencesSync(this.context, options);
// 2️⃣ 读写操作(像便利贴一样方便)dataPreferences.putSync('darkMode', true); // 写let mode = dataPreferences.getSync('darkMode', false); // 读
// 3️⃣ 持久化(保存笔记)dataPreferences.flush((err) => { /*...*/ });
复制代码



⚠️使用前必读!这些坑千万别踩



🛠️接口速查表(常用版)



📝开发四部曲(附赠防秃指南)

1️⃣ 导入模块

import { preferences } from '@kit.ArkData';  // 标准起手式
复制代码

2️⃣ 数据操作三连

// 写数据(覆盖写入不留情!)dataPreferences.putSync('fontSize', 16);
// 读数据(找不到就返回默认值)let fontSize = dataPreferences.getSync('fontSize', 14);
// 删数据(消失吧!)dataPreferences.deleteSync('oldSetting');
复制代码

3️⃣ 特殊字符处理

// 写入时转码let uIntArray = new TextEncoder().encode("~!@#¥%");dataPreferences.putSync('specialChar', uIntArray);
// 读取时解码let result = new TextDecoder().decode(uIntArray as Uint8Array);
复制代码

4️⃣ 订阅数据变化

// 设置监听小秘书👂dataPreferences.on('change', (key) => {  console.log(`${key}发生变化啦!`);});
// 记得取消订阅哦!// dataPreferences.off('change');
复制代码



💡专家建议

  1. 内存优化:定期使用deletePreferencesFromCache清理不用的实例

  2. 错误处理:所有异步操作都要加 err 判断!

  3. 数据安全:重要数据建议双重备份(别全指望 Preferences)

  4. 性能秘籍:批量操作时先修改内存实例,最后一次性 flush


举个栗子🌰:


// 正确姿势✅dataPreferences.putSync('set1', 'A');dataPreferences.putSync('set2', 'B');dataPreferences.flush();  // 最后统一保存
// 错误姿势❌dataPreferences.putSync('set1', 'A').flush();dataPreferences.putSync('set2', 'B').flush();
复制代码




🎉搞定!现在你已经是 Preferences 使用高手啦~ 遇到问题记得回来查表哦!


📚关系型数据库使用宝典:从入门到精通📚



🎯适用场景大揭秘

  • 复杂数据管家:学生档案/员工信息等关系型数据存储

  • 超能力加持:事务处理/索引优化/视图管理一应俱全

  • 不擅长领域:单条数据超过 2MB(会撑破肚皮哦!)

  • 🌟

  • 经典案例

  • 班级管理系统(姓名+学号+成绩)

  • 企业 HR 系统(工号+职位+薪资)



🚀核心机制三连击

// 1️⃣ 创建数据库(搭房子🏠)const STORE_CONFIG = {  name: 'CompanyDB.db',  securityLevel: relationalStore.SecurityLevel.S3};
// 2️⃣ 版本管理(智能升级🔝)if (store.version === 1) { store.executeSql('ALTER TABLE EMPLOYEE ADD COLUMN BIRTHDAY TEXT'); store.version = 2;}
// 3️⃣ 数据操作(增删改查四件套✨)store.insert('EMPLOYEE', {NAME: 'Tony', AGE: 28});
复制代码


![关系型数据库运作机制示意图]



⚠️避坑指南:数据库生存法则



🔧接口速查手册



🛠️开发五步成诗

1️⃣ 环境搭建

import { relationalStore } from '@kit.ArkData';  // 必备开场白
复制代码

2️⃣ 建表升级

// 智能版本检测(自动升级结构🆙)if (store.version === 0) {  const SQL = `CREATE TABLE IF NOT EXISTS STUDENTS (    ID INTEGER PRIMARY KEY AUTOINCREMENT,    NAME TEXT NOT NULL,    SCORE REAL  )`;  store.executeSql(SQL);  store.version = 1;}
复制代码

3️⃣ CRUD 实战

// 插入数据store.insert('STUDENTS', {NAME: 'Lucy', SCORE: 95.5}, (err, rowId) => {  console.log(`新同学ID:${rowId}`);});
// 条件查询let predicates = new relationalStore.RdbPredicates('STUDENTS');predicates.greaterThan('SCORE', 90);store.query(predicates, ['NAME', 'SCORE'], (err, resultSet) => { // 处理学霸名单...});
复制代码

4️⃣ 数据备份

// 手动备份(重要操作!)store.backup('Backup.db', (err) => {  if (!err) console.log('备份成功!');});
复制代码

5️⃣ 异常处理

// 数据库崩溃恢复try {  // 数据库操作...} catch (err) {  if (err.code == 14800011) {    console.log('数据库异常,启动重建程序!');    // 重建数据库逻辑...  }}
复制代码



💡专家技巧锦囊

  1. 性能优化

  2. 使用LIMITOFFSET分页查询

  3. 复杂查询放在TaskPool中执行

  4. 数据类型转换

  5. 事务处理

  6. 内存管理



🚨紧急情况处理

数据库崩溃怎么办?


  1. 捕获 14800011 错误码

  2. 删除旧数据库

  3. 重建数据库结构

  4. 从备份恢复数据


relationalStore.deleteRdbStore(context, 'CrashDB.db', () => {  // 重建数据库...});
复制代码




🎉恭喜!你已经掌握关系型数据库的精髓啦~ 遇到问题记得回来查宝典哦!


用户头像

Turing_010

关注

还未添加个人签名 2025-05-22 加入

还未添加个人简介

评论

发布
暂无评论
HarmonyOSNext全栈数据存储双星解析:轻量级VS关系型存储终极指南_Turing_010_InfoQ写作社区