HarmonyOS 鸿蒙Next数据如何持久化
HarmonyOS 鸿蒙Next数据如何持久化 像联系人的那种数据类型应该怎么持久化呢?
4 回复
单机用SQLite,不过最好用其他关系型数据库存储在服务器上
鸿蒙Next数据持久化主要通过以下方式实现:
- 首选项(Preferences):轻量级键值存储,适合简单数据,使用@ohos.data.preferences模块
- 关系型数据库(RelationalDatabase):基于SQLite扩展,支持复杂数据关系,使用@ohos.data.relationalStore
- 分布式数据对象(DistributedDataObject):设备间数据同步,使用@ohos.data.distributedDataObject
- 文件系统:通过@ohos.file.fs访问应用沙箱目录文件
首选项和关系型数据库操作需在UIAbilityContext或AbilityStage的上下文环境中获取数据库实例。
在HarmonyOS Next中,联系人这类结构化数据的持久化推荐使用关系型数据库(RelationalStore)。以下是具体实现方案:
- 创建数据库和表:
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);
});
- 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"]);
- 数据类型建议:
- 简单属性:直接使用TEXT/INTEGER等基础类型
- 复杂属性:可考虑JSON序列化后存储为TEXT
- 图片等二进制数据:建议存储文件路径而非直接存BLOB
这种方案相比Preferences更适合结构化数据管理,支持事务、复杂查询等特性。