HarmonyOSNext全栈数据存储双星解析:轻量级VS关系型存储终极指南
2025-06-07 11:03:38
108次阅读
0个评论
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) => { /*...*/ });
⚠️使用前必读!这些坑千万别踩
雷区 | 安全姿势 |
---|---|
多进程使用 | ❌ 绝对禁止! |
Key超1024字节 | ❌ 会爆! |
特殊字符存储 | ✅ 转Uint8Array保平安 |
并发删除操作 | ❌ 禁止 |
🛠️接口速查表(常用版)
方法 | 作用 | 同步/异步 |
---|---|---|
getPreferencesSync() |
获取存储实例 | ⚡同步 |
putSync() |
写入数据 | ⚡同步 |
on('change') |
订阅数据变化 | 🌈异步 |
deletePreferences() |
删除实例+文件 | 🌈异步 |
📝开发四部曲(附赠防秃指南)
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');
💡专家建议
- 内存优化:定期使用
deletePreferencesFromCache
清理不用的实例 - 错误处理:所有异步操作都要加err判断!
- 数据安全:重要数据建议双重备份(别全指望Preferences)
- 性能秘籍:批量操作时先修改内存实例,最后一次性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});
![关系型数据库运作机制示意图]
⚠️避坑指南:数据库生存法则
危险操作 | 安全方案 |
---|---|
多线程写操作 | ❌ 绝对禁止! |
单次查询超5000条 | ✅ 分批次查询保平安 |
特殊字符处理 | ✅ 使用Blob类型存储 |
数据库迁移 | ✅ 连带.wal/.shm文件一起搬 |
🔧接口速查手册
方法 | 作用 | 同步/异步 |
---|---|---|
getRdbStore() |
创建数据库实例 | 🌈异步 |
executeSql() |
执行SQL语句 | 🌈异步 |
insert() |
插入新数据 | 🌈异步 |
query() |
条件查询 | 🌈异步 |
🛠️开发五步成诗
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('数据库异常,启动重建程序!');
// 重建数据库逻辑...
}
}
💡专家技巧锦囊
-
性能优化:
- 使用
LIMIT
和OFFSET
分页查询 - 复杂查询放在
TaskPool
中执行
// 分页查询示例 predicates.limit(100).offset(page * 100);
- 使用
-
数据类型转换:
// Blob转Uint8Array const photoData = resultSet.getBlob('PHOTO') as Uint8Array;
-
事务处理:
store.beginTransaction(); try { // 批量操作... store.commit(); } catch (err) { store.rollback(); }
-
内存管理:
resultSet.close(); // 用完记得关水龙头🚰
🚨紧急情况处理
数据库崩溃怎么办?
- 捕获14800011错误码
- 删除旧数据库
- 重建数据库结构
- 从备份恢复数据
relationalStore.deleteRdbStore(context, 'CrashDB.db', () => {
// 重建数据库...
});
🎉恭喜!你已经掌握关系型数据库的精髓啦~ 遇到问题记得回来查宝典哦!
00
- 0回答
- 0粉丝
- 0关注
相关话题
- HarmonyOs开发:关系型数据库封装之增删改查
- HarmonyOsNEXT【ArkUI超全解析】新手必看的方舟UI框架指南!
- 鸿蒙next 关系型数据库 你不知道的事情
- 轻松上手-MVVM_关系型数据库_云函数T云数据库
- HarmonyOS NEXT ArkUI生命周期终极指南 | 组件与页面的关系
- 《HarmonyOSNext超神路由指南:组件级导航+智能多端适配+动态路由黑科技全解析》
- (二一)ArkTS 数据存储与管理
- HarmonyOSNext列表开发指南
- 第四十课:HarmonyOS Next物联网应用开发全指南:设备连接、数据处理与实战解析
- 鸿蒙开发:实现键值数据库存储
- 《HarmonyOSNext超全开发指南:UIAbility组件与跨端协作完全解析》
- HarmonyOSNext网格布局开发全攻略:从九宫格到跨屏动画的终极实践指南》
- 第十三课:HarmonyOS Next动画开发终极指南
- 【HarmonyOS NEXT】ArkTs函数、类、接口、泛型、装饰器解析与使用
- 《HarmonyOSNext终极UIAbility手册:从启动模式到页面跳转,一网打尽!》