
(三)HarmonyOS 中 ArkData 的数据存储方式剖析 原创
HarmonyOS 中 ArkData 的数据存储方式剖析
在 HarmonyOS 开发领域,构建高效、稳定的应用离不开强大的数据存储解决方案。ArkData 作为 HarmonyOS 生态中数据管理的核心框架,提供了 Preferences(用户首选项)、KV-Store(键值型数据库)和 RelationalStore(关系型数据库)三种各具特色的数据存储方式。这些存储方式能满足不同场景下的数据存储需求,助力开发者打造功能全面、体验流畅的应用。本文将深入剖析这三种数据存储方式,并结合代码示例,帮助开发者更好地理解和应用。
Preferences:轻量级配置数据存储
Preferences 为开发者提供轻量级的配置数据持久化方案,适用于存储应用配置信息、用户偏好设置等少量数据。这类数据通常以文本形式保存在设备中,应用访问时会将文本数据全量加载到内存,这使得 Preferences 具备访问速度快、效率高的特点,但不适用于存储大量数据。
1. 写入数据
以下代码展示了如何通过 Preferences 记录用户的语言偏好:
// 获取Preferences实例
const preferences = getPreferences(this, LocalStorageLevel.PRIVATE);
// 写入用户语言偏好数据
preferences.putSync('languagePreference', 'zh-CN');
preferences.flush();
2. 读取数据
在应用启动时,可通过以下代码读取用户之前设置的语言偏好:
const preferences = getPreferences(this, LocalStorageLevel.PRIVATE);
const language = preferences.get('languagePreference', 'en-US');
console.log(`用户语言偏好: ${language}`);
KV-Store:键值对数据存储
KV-Store 以 “键值对” 的形式组织、索引和存储数据,是一种非关系型数据库。这种数据结构使得数据的存储和检索极为便捷,适合存储业务关系简单的数据。在分布式场景下,KV-Store 能降低数据库版本兼容和数据同步冲突解决的复杂度,更易于实现跨设备、跨版本兼容。
1. 创建 KV-Store 并进行数据操作
import { distributedKVStore } from '@kit.ArkData';
import { BusinessError } from '@kit.BasicServicesKit';
let kvManager: distributedKVStore.KVManager | undefined = undefined;
let kvStore: distributedKVStore.SingleKVStore | undefined = undefined;
let context = getContext(this);
const kvManagerConfig: distributedKVStore.KVManagerConfig = {
context: context,
bundleName: 'com.example.datastoragetest'
};
try {
kvManager = distributedKVStore.createKVManager(kvManagerConfig);
console.info('成功创建KVManager');
} catch (e) {
let error = e as BusinessError;
console.error(`创建KVManager失败。错误码:${error.code}, 错误信息:${error.message}`);
}
if (kvManager!== undefined) {
kvManager = kvManager as distributedKVStore.KVManager;
const options: distributedKVStore.Options = {
createIfMissing: true,
encrypt: true
};
kvManager.getKVStore<distributedKVStore.SingleKVStore>('storeId', options, (err, store: distributedKVStore.SingleKVStore) => {
if (err) {
console.error(`获取KVStore失败。错误码:${err.code}, 错误信息:${err.message}`);
return;
}
console.info('成功获取KVStore');
kvStore = store;
// 写入数据
kvStore.put('username', 'testUser');
// 读取数据
const username = kvStore.get('username');
console.log(`用户名: ${username}`);
});
}
RelationalStore:关系型数据存储
当处理复杂的关系型数据时,RelationalStore 是理想选择。它支持一系列增、删、改、查操作,开发者还能运行自定义 SQL 语句,满足复杂业务场景的需求。
1. 创建数据库并进行数据操作
下面以一个简单的任务管理应用为例,展示如何使用 RelationalStore 创建任务表,并进行数据的插入和查询操作。
import { relationalStore } from '@ohos.data.relationalStore';
// 创建数据库配置
const config: relationalStore.RelationalStoreConfig = {
name: 'tasks.db',
version: 1
};
relationalStore.getRelationalStore(config).then((store) => {
// 创建任务表
const createTableSql = `CREATE TABLE IF NOT EXISTS tasks (id INTEGER PRIMARY KEY AUTOINCREMENT, task TEXT, status TEXT)`;
store.executeSql(createTableSql).then(() => {
console.info('成功创建任务表');
// 插入数据
const insertSql = `INSERT INTO tasks (task, status) VALUES (?,?)`;
const values = [['完成文档撰写', '未完成']];
store.executeSql(insertSql, values).then(() => {
console.info('成功插入数据');
// 查询数据
const querySql = `SELECT * FROM tasks`;
store.executeSql(querySql).then((resultSet) => {
const columnNames = resultSet.getColumnNames();
while (resultSet.goToNextRow()) {
for (const name of columnNames) {
console.log(`${name}: ${resultSet.getString(name)}`);
}
}
}).catch((error) => {
console.error(`查询数据失败: ${error.message}`);
});
}).catch((error) => {
console.error(`插入数据失败: ${error.message}`);
});
}).catch((error) => {
console.error(`创建任务表失败: ${error.message}`);
});
}).catch((error) => {
console.error(`获取关系型数据库失败: ${error.message}`);
});
三种存储方式的选择策略
在实际开发中,选择合适的数据存储方式至关重要。当数据量较小且结构简单,如应用配置信息、用户偏好等,Preferences 是最佳选择;若数据关系简单,且需要在分布式场景下实现数据同步,KV-Store 更为合适;而处理复杂的关系型数据,以及需要进行复杂查询和事务处理时,RelationalStore 则是首选。
总结
Preferences、KV-Store 和 RelationalStore 作为 ArkData 提供的三种主要数据存储方式,各有优势,能够满足 HarmonyOS 应用开发中的各种数据存储需求。开发者通过深入理解和合理运用这些存储方式,能够提升应用的数据管理能力,为用户打造更加优质的应用体验。随着 HarmonyOS 生态的不断壮大,ArkData 也将持续优化,为开发者提供更多强大的工具和功能。
