鸿蒙Next数据存储功能如何使用

在鸿蒙Next系统中,数据存储功能具体支持哪些方式?比如Preferences、数据库、文件存储等,能否详细说明每种方式的使用步骤和适用场景?另外,不同存储方式之间的性能差异和限制有哪些?有没有最佳实践或者常见问题的解决方案可以分享?

2 回复

鸿蒙Next的数据存储?简单说就是“存得爽,读得嗨”!用Preferences存轻量数据,RDB搞关系型数据库,DistributedData玩跨设备同步。记住:别把猫的照片存进Preferences,不然手机会胖到卡顿!代码三行起步,bug终身相伴~

更多关于鸿蒙Next数据存储功能如何使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


鸿蒙Next(HarmonyOS NEXT)的数据存储功能主要通过用户首选项(Preferences)、关系型数据库(RelationalStore)、分布式数据对象(DistributedDataObject) 等实现。以下是核心方法及代码示例:


1. 用户首选项(Preferences)

适用于轻量数据(如配置信息):

import { preferences } from '@kit.ArkData';

// 获取Preferences实例
let pref = await preferences.getPreferences(this.context, 'mypref');

// 存数据
await pref.put('key', 'value');
await pref.flush(); // 提交更改

// 取数据
let value = await pref.get('key', 'defaultValue');

2. 关系型数据库(RelationalStore)

适用于结构化数据:

import { relationalStore } from '@kit.ArkData';

// 定义表结构
const TABLE_NAME = 'user';
const SQL_CREATE_TABLE = `CREATE TABLE IF NOT EXISTS ${TABLE_NAME} (id INTEGER PRIMARY KEY, name TEXT)`;

// 创建数据库
let rdb = await relationalStore.getRdbStore(this.context, {
  name: 'test.db',
  securityLevel: relationalStore.SecurityLevel.S1
});
await rdb.executeSql(SQL_CREATE_TABLE);

// 插入数据
const valueBucket = { id: 1, name: 'Alice' };
await rdb.insert(TABLE_NAME, valueBucket);

// 查询数据
let predicates = new relationalStore.RdbPredicates(TABLE_NAME);
predicates.equalTo('id', 1);
let result = await rdb.query(predicates, ['name']);

3. 分布式数据对象(DistributedDataObject)

用于跨设备数据同步:

import { distributedObject } from '@kit.ArkData';

// 创建分布式对象
let obj = distributedObject.createDistributedObject({ name: 'init' });

// 监听数据变化
obj.on('change', (sessionId, fields) => {
  console.log(`数据被设备${sessionId}修改:`, fields);
});

// 修改数据(自动同步到其他设备)
obj.name = 'NewValue';

关键注意事项:

  1. 权限配置:在module.json5中声明所需权限(如ohos.permission.DISTRIBUTED_DATASYNC)。
  2. 数据加密:关系型数据库支持安全级别(S1-S4)配置。
  3. 跨设备同步:需同一华为账号且设备组网。

根据需求选择存储方式,轻量配置用Preferences,复杂查询用关系型数据库,多设备协同用分布式对象。

回到顶部