HarmonyOS 鸿蒙Next数据如何持久化

HarmonyOS 鸿蒙Next数据如何持久化 像联系人的那种数据类型应该怎么持久化呢?

4 回复

先附上官网链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-data-persistence

如果数据量小(总体占用内存小,单条字节数少),需要快速访问、操作简单,建议使用首选项。访问数据最快。

如果数据量较大,且内容字段简单,例如只有两列,可以使用键值型数据库。

如果数据量大,且内容之间关联复杂,具有很多字段,可以使用关系型数据库。容量大。

键值型数据库、关系型数据库分为分布式、普通两种类型。分布式建议在开发分布式应用,需要使用分布式服务时使用。

更多关于HarmonyOS 鸿蒙Next数据如何持久化的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


单机用SQLite,不过最好用其他关系型数据库存储在服务器上

鸿蒙Next数据持久化主要通过以下方式实现:

  1. 首选项(Preferences):轻量级键值存储,适合简单数据,使用@ohos.data.preferences模块
  2. 关系型数据库(RelationalDatabase):基于SQLite扩展,支持复杂数据关系,使用@ohos.data.relationalStore
  3. 分布式数据对象(DistributedDataObject):设备间数据同步,使用@ohos.data.distributedDataObject
  4. 文件系统:通过@ohos.file.fs访问应用沙箱目录文件

首选项和关系型数据库操作需在UIAbilityContext或AbilityStage的上下文环境中获取数据库实例。

在HarmonyOS Next中,联系人这类结构化数据的持久化推荐使用关系型数据库(RelationalStore)。以下是具体实现方案:

  1. 创建数据库和表:
import relationalStore from '@ohos.data.relationalStore';

const STORE_CONFIG = {
  name: 'Contacts.db',
  securityLevel: relationalStore.SecurityLevel.S1
};

const SQL_CREATE_TABLE = `
  CREATE TABLE IF NOT EXISTS contacts (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    phone TEXT,
    email TEXT
  )`;

let rdbStore;
relationalStore.getRdbStore(this.context, STORE_CONFIG, (err, store) => {
  rdbStore = store;
  rdbStore.executeSql(SQL_CREATE_TABLE);
});
  1. CRUD操作示例:
// 插入
const valueBucket = {
  "name": "张三",
  "phone": "13800138000",
  "email": "zhangsan@example.com"
};
rdbStore.insert("contacts", valueBucket);

// 查询
const predicates = new relationalStore.RdbPredicates("contacts");
predicates.equalTo("name", "张三");
let resultSet = await rdbStore.query(predicates, ["id", "name", "phone"]);
  1. 数据类型建议:
  • 简单属性:直接使用TEXT/INTEGER等基础类型
  • 复杂属性:可考虑JSON序列化后存储为TEXT
  • 图片等二进制数据:建议存储文件路径而非直接存BLOB

这种方案相比Preferences更适合结构化数据管理,支持事务、复杂查询等特性。

回到顶部