最近在适配一个记账类应用到HarmonyOS NEXT平台,重点研究了HarmonyOS Design规范下的数据库设计与操作。记录一些关键点供日后参考。
数据库设计部分
遵循HarmonyOS Design的"简洁高效"原则,设计了三个主要表:
typescript
// 账户表
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.初始化数据库
typescript
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);
});
2.插入账户数据示例
typescript
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}`);
}
}
3.复杂查询示例(按月份统计收支)
typescript
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}`);
}
}
注意事项
1.严格遵循HarmonyOS Design的数据安全规范,敏感数据如金额使用REAL类型精确存储
2.事务处理要完整,特别是转账类操作需要保证原子性
3.考虑使用Predicates构建查询条件,比原始SQL更安全
4.大数据量时注意使用异步操作避免阻塞UI线程
这次实践让我对HarmonyOS Design规范下的数据持久化方案有了更深理解,特别是在数据安全和性能平衡方面的考虑。下一步需要优化数据库索引和考虑分布式数据同步方案。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。