HarmonyOS鸿蒙NEXT中级开发笔记:家庭菜谱应用的数据库设计与实践

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS鸿蒙NEXT中级开发笔记:家庭菜谱应用的数据库设计与实践

今天在适配家庭菜谱应用到HarmonyOS NEXT时,重点研究了HarmonyOS Design规范下的数据持久化方案。基于API12的@ohos.data.relationalStore关系型数据库模块,记录几个关键实现点:

1. 数据库建模

遵循HarmonyOS Design的"简洁高效"原则,设计了三张核心表:

// 数据库Schema定义  
const SQL_CREATE_TABLE = `  
CREATE TABLE IF NOT EXISTS recipe (  
    id INTEGER PRIMARY KEY AUTOINCREMENT,  
    name TEXT NOT NULL,  
    category TEXT CHECK(category IN ('中式','西式','日式')),  
    difficulty INTEGER DEFAULT 1  
)  
CREATE TABLE IF NOT EXISTS ingredient (  
    id INTEGER PRIMARY KEY,  
    recipe_id INTEGER,  
    name TEXT,  
    amount TEXT,  
    FOREIGN KEY (recipe_id) REFERENCES recipe(id) ON DELETE CASCADE  
)`;

2. 数据库初始化

采用HarmonyOS推荐的异步事务处理:

import relationalStore from '[@ohos](/user/ohos).data.relationalStore';  

let rdbStore: relationalStore.RdbStore;  
const STORE_CONFIG = {  
    name: "RecipeDB.db",  
    securityLevel: relationalStore.SecurityLevel.S1  
};  

async function initDB() {  
    try {  
        rdbStore = await relationalStore.getRdbStore(this.context, STORE_CONFIG);  
        await rdbStore.executeSql(SQL_CREATE_TABLE);  
        console.info('Database initialized');  
    } catch (err) {  
        console.error(`DB init failed: ${err.code}-${err.message}`);  
    }  
}  

3. 数据操作封装

为符合HarmonyOS Design的流畅体验要求,对CRUD操作做了线程优化:

// 插入菜谱示例  
async function insertRecipe(recipe: Recipe) {  
    const valueBucket = {  
        "name": recipe.name,  
        "category": recipe.category,  
        "difficulty": recipe.difficulty  
    };  
    try {  
        await rdbStore.insert("recipe", valueBucket);  
    } catch (err) {  
        console.error(`Insert failed: ${err.message}`);  
    }  
}  

// 查询带食材的完整菜谱  
async function getFullRecipe(recipeId: number) {  
    const predicates = new relationalStore.RdbPredicates("recipe");  
    predicates.equalTo("id", recipeId);  
    const recipe = await rdbStore.query(predicates, ["id","name"]);  

    const ingPredicates = new relationalStore.RdbPredicates("ingredient");  
    ingPredicates.equalTo("recipe_id", recipeId);  
    const ingredients = await rdbStore.query(ingPredicates);  

    return { ...recipe, ingredients };  
}

遇到的问题:

  • 跨设备同步场景下需要结合DistributedDataKit扩展
  • 大数据量分页查询时需注意Predicates的skip/limit设置

明天计划尝试用@ohos.data.preferences实现用户偏好存储,与主数据库配合使用。整个开发过程深刻感受到HarmonyOS Design在数据一致性方面的严谨要求。


更多关于HarmonyOS鸿蒙NEXT中级开发笔记:家庭菜谱应用的数据库设计与实践的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

HarmonyOS鸿蒙NEXT中级开发笔记:家庭菜谱应用的数据库设计与实践

在HarmonyOS鸿蒙NEXT中,家庭菜谱应用的数据库设计主要基于分布式数据管理框架。数据库采用轻量级关系型数据库LitePal,支持SQLite语法,适用于移动设备。数据库表设计包括菜谱表、食材表和步骤表。

菜谱表(Recipe)包含字段:id(主键)、name(菜谱名称)、category(分类)、description(描述)、image(图片路径)。食材表(Ingredient)包含字段:id(主键)、recipe_id(外键,关联菜谱表)、name(食材名称)、quantity(数量)。步骤表(Step)包含字段:id(主键)、recipe_id(外键,关联菜谱表)、step_number(步骤序号)、description(步骤描述)。

数据库操作通过DataAbility实现,提供增删改查接口。DataAbility继承自Ability,通过URI定位数据源,支持跨设备数据访问。数据同步通过分布式数据服务(Distributed Data Service, DDS)实现,确保多设备间数据一致性。

实践过程中,需注意数据库版本管理,通过onUpgrade方法处理表结构变更。数据查询优化可通过索引和预编译SQL语句实现。数据安全通过权限控制和数据加密保障,确保用户隐私不被泄露。

更多关于HarmonyOS鸿蒙NEXT中级开发笔记:家庭菜谱应用的数据库设计与实践的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙NEXT中开发家庭菜谱应用时,数据库设计是关键。建议使用SQLite作为本地数据库,设计表结构包括:Recipes(菜谱表,含ID、名称、描述等字段)、Ingredients(食材表,含ID、名称、单位等字段)、Steps(步骤表,含ID、菜谱ID、步骤描述等字段)。通过外键关联表,确保数据一致性。实践时,利用HarmonyOS的DataAbility进行数据操作,结合LitePal等ORM框架简化开发。注意优化查询性能,确保应用流畅性。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!