HarmonyOS鸿蒙NEXT中级开发笔记:基于HarmonyOS Design的记账应用数据库实践

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

HarmonyOS鸿蒙NEXT中级开发笔记:基于HarmonyOS Design的记账应用数据库实践 最近在适配一个记账类应用到HarmonyOS NEXT平台,重点研究了HarmonyOS Design规范下的数据库设计与操作。记录一些关键点供日后参考。

数据库设计部分

遵循HarmonyOS Design的"简洁高效"原则,设计了三个主要表:

// 账户表
interface Account {
    id: number;      // 主键
    name: string;    // 账户名称
    type: number;    // 账户类型
    balance: number; // 当前余额
    createTime: number; // 创建时间戳
}
// 交易记录表
interface Transaction {
    id: number;       // 主键
    accountId: number; // 外键-账户ID
    type: number;     // 收支类型
    amount: number;   // 金额
    category: string; // 分类
    remark?: string;  // 备注(可选)
    createTime: number; // 创建时间戳
}
// 预算表
interface Budget {
    id: number;
    category: string; // 分类
    amount: number;   // 预算金额
    cycle: number;    // 周期(月/周)
}

数据库操作实现

使用HarmonyOS的RDB关系型数据库,API12版本接口:

  1. 初始化数据库
import relationalStore from '@ohos.data.relationalStore';

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

let rdbStore;
relationalStore.getRdbStore(this.context, STORE_CONFIG, (err, store) => {
    if (err) {
        console.error(`Failed to get RdbStore. Code:${err.code},message:${err.message}`);
        return;
    }
    rdbStore = store;
    // 建表
    const sql = `CREATE TABLE IF NOT EXISTS account (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        type INTEGER,
        balance REAL,
        createTime INTEGER)`;
    rdbStore.executeSql(sql);
});
  1. 插入账户数据示例
async function insertAccount(account: Account) {
    const valueBucket = {
        'name': account.name,
        'type': account.type,
        'balance': account.balance,
        'createTime': new Date().getTime()
    };
    try {
        await rdbStore.insert('account', valueBucket);
        console.info('Succeeded in inserting account.');
    } catch (err) {
        console.error(`Failed to insert account. Code:${err.code},message:${err.message}`);
    }
}
  1. 复杂查询示例(按月份统计收支)
async function queryMonthlySummary(year: number, month: number) {
    const startTime = new Date(year, month-1, 1).getTime();
    const endTime = new Date(year, month, 1).getTime();

    const predicates = new relationalStore.RdbPredicates('transaction');
    predicates.between('createTime', startTime, endTime);

    try {
        const result = await rdbStore.query(
            predicates,
            ['type', 'SUM(amount) as total']
        );
        while (result.goToNextRow()) {
            const type = result.getDouble(result.getColumnIndex('type'));
            const total = result.getDouble(result.getColumnIndex('total'));
            console.info(`Type:${type}, Total:${total}`);
        }
        result.close();
    } catch (err) {
        console.error(`Failed to query. Code:${err.code},message:${err.message}`);
    }
}

注意事项

  • 严格遵循HarmonyOS Design的数据安全规范,敏感数据如金额使用REAL类型精确存储
  • 事务处理要完整,特别是转账类操作需要保证原子性
  • 考虑使用Predicates构建查询条件,比原始SQL更安全
  • 大数据量时注意使用异步操作避免阻塞UI线程

这次实践让我对HarmonyOS Design规范下的数据持久化方案有了更深理解,特别是在数据安全和性能平衡方面的考虑。下一步需要优化数据库索引和考虑分布式数据同步方案。


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

2 回复

在HarmonyOS鸿蒙NEXT中开发基于HarmonyOS Design的记账应用,数据库实践主要涉及以下几个方面:

  1. 数据库选择:HarmonyOS提供了轻量级数据库LitePal,适用于本地数据存储。LitePal基于SQLite,支持ORM(对象关系映射),简化了数据库操作。

  2. 数据库初始化:在应用启动时,通过LitePal的LitePal.initialize(context)方法初始化数据库。可以在onCreate方法中调用,确保数据库在应用启动时已准备好。

  3. 数据模型定义:使用Java或Kotlin定义数据模型类,继承LitePalSupport。例如,定义一个Record类表示记账记录,包含字段如idamountcategorydate等。

  4. 数据库操作

    • 插入数据:创建Record对象,调用save()方法将数据插入数据库。
    • 查询数据:使用LitePal.findAll(Record.class)查询所有记录,或通过LitePal.where("category = ?", "food").find(Record.class)查询特定类别的记录。
    • 更新数据:查询到记录后,修改对象属性,调用update()方法更新数据库。
    • 删除数据:调用delete()方法删除记录,或使用LitePal.deleteAll(Record.class, "category = ?", "food")删除特定类别的记录。
  5. 数据绑定与UI更新:使用HarmonyOS的DataAbilityDataObserver实现数据与UI的绑定。当数据库数据变化时,通知UI更新显示。

  6. 数据备份与恢复:通过HarmonyOS的BackupManager实现数据备份与恢复,确保用户数据安全。

  7. 性能优化:对于大量数据操作,使用事务(LitePal.beginTransaction()LitePal.setTransactionSuccessful()LitePal.endTransaction())提高操作效率。

通过以上步骤,可以在HarmonyOS鸿蒙NEXT中实现一个基于HarmonyOS Design的记账应用的数据库功能。

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


在HarmonyOS鸿蒙NEXT中开发基于HarmonyOS Design的记账应用,数据库实践是关键。首先,使用轻量级数据库LitePal进行数据存储,支持SQLite操作,简化开发流程。其次,设计合理的数据库表结构,如用户表、账单表等,确保数据一致性和完整性。通过ORM框架实现对象与数据库的映射,提高开发效率。最后,优化数据库查询,使用索引和缓存机制提升应用性能。结合HarmonyOS Design的UI组件,打造流畅的用户体验。

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