健康生活应用参考了黑马程序员实战案例https://www.bilibili.com/video/BV1Sa4y1Z7B1?p=50&vd_source=49f2a8575dc8ef2586b13f73d3ac1808
鸿蒙应用开发实战:深入饮食记录与个人信息管理功能
一、引言
在健康应用中,饮食记录和个人信息管理是提升用户体验的关键。本文将深入探讨如何在鸿蒙应用中实现这些功能,特别是数据库层面的操作。
二、饮食记录功能实现
1、功能概述
用户可以通过饮食记录功能,便捷地记录每日饮食摄入情况,根据摄入情况来更新渲染页面。
2、数据库操作
在RecordService
类中,我们实现了数据库的基本操作,包括新增记录insert
、删除记录deleteById
和查询记录queryRecordByDate
。
- 新增记录:
insert
方法接收记录类型ID、记录项ID和数量,创建时间默认为当前时间。 - 删除记录:
deleteById
方法根据记录ID删除对应的饮食记录。 - 查询记录:
queryRecordByDate
方法根据给定日期查询当天的所有饮食记录。
三、数据库模型实现
1、RecordModel 类
RecordModel
类负责与数据库进行交互,包括建表、插入、删除和查询操作。
- 建表语句:
getCreateTableSql
和getCreateTableSql1
方法返回建表SQL语句。 - 插入操作:
insert
和insert1
方法将记录或个人信息插入到对应的表中。 - 删除操作:
deleteById
和deleteById1
方法根据ID删除记录。 - 查询操作:
listByDate
和listByDate1
方法根据日期查询记录。
2、数据库表创建
数据库表的创建是通过执行相应的SQL语句完成的,例如CREATE_TABLE_SQL
和CREATE_USER_PROFILES_TABLE_SQL
。
四、代码实现示例
1、数据库操作服务逻辑
在RecordService
类中,我们通过RecordModel
与数据库进行交互。
class RecordService { insert(typeId: number, itemId: number, amount: number): Promise<number> { let createTime = DateUtil.getCurrentTime(); // 获取当前时间 return recordModel.insert({typeId, itemId, amount, createTime}); } deleteById(id: number): Promise<number> { return recordModel.deleteById(id); } // 省略其他数据库操作方法... }
/**
* 数据库建表语句
*/
import relationalStore from '@ohos.data.relationalStore'
import { ColumnInfo, ColumnType } from '../common/bean/ColumnInfo'
import RecordPO from '../common/bean/RecordPO'
import DbUtil from '../common/utils/DbUtil'
const CREATE_TABLE_SQL: string = `
CREATE TABLE IF NOT EXISTS record (
id INTEGER PRIMARY KEY AUTOINCREMENT,
type_id INTEGER NOT NULL,
item_id INTEGER NOT NULL,
amount DOUBLE NOT NULL,
create_time INTEGER NOT NULL
)
`
//创建第二个表,用来存储编辑资料的数据,实现持久化。
const CREATE_USER_PROFILES_TABLE_SQL:string = `
CREATE TABLE IF NOT EXISTS user_profiles (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nickname TEXT NOT NULL,
gender TEXT NOT NULL,
location TEXT NOT NULL,
createtime INTEGER NOT NULL
)
`;
//表1
const COLUMNS: ColumnInfo[] = [
{name: 'id', columnName: 'id', type: ColumnType.LONG},
{name: 'typeId', columnName: 'type_id', type: ColumnType.LONG},
{name: 'itemId', columnName: 'item_id', type: ColumnType.LONG},
{name: 'amount', columnName: 'amount', type: ColumnType.DOUBLE},
{name: 'createTime', columnName: 'create_time', type: ColumnType.LONG}
]
//表2
const COLUMNS1: ColumnInfo[] = [
{name: 'id1', columnName: 'id1', type: ColumnType.LONG},
{name: 'nickName', columnName: 'nickname', type: ColumnType.STRING},
{name: 'Gender', columnName: 'gender', type: ColumnType.STRING},
{name: 'Location', columnName: 'location', type: ColumnType.STRING},
{name: 'createTime', columnName: 'createtime', type: ColumnType.LONG}
]
//表1
const TABLE_NAME = 'record'
const ID_COLUMN = 'id'
const DATE_COLUMN = 'create_time'
//表2
const TABLE_NAME1 = 'record1'
const ID_COLUMN1 = 'id1'
const DATE_COLUMN1 = 'createtime'
class RecordModel {
//表1
getCreateTableSql(): string {
return CREATE_TABLE_SQL
}
//表2
getCreateTableSql1():string{
return CREATE_USER_PROFILES_TABLE_SQL;
}
//表1
insert(record: RecordPO): Promise<number>{
return DbUtil.insert(TABLE_NAME, record, COLUMNS)
}
//表2
insert1(record1: RecordPO): Promise<number>{
return DbUtil.insert(TABLE_NAME1, record1, COLUMNS1)
}
//表1
deleteById(id: number): Promise<number>{
// 1.删除条件
let predicates = new relationalStore.RdbPredicates(TABLE_NAME)
predicates.equalTo(ID_COLUMN, id)
// 2.删除
return DbUtil.delete(predicates)
}
//表2
deleteById1(id1: number): Promise<number>{
// 1.删除条件
let predicates = new relationalStore.RdbPredicates(TABLE_NAME1)
predicates.equalTo(ID_COLUMN1, id1)
// 2.删除
return DbUtil.delete(predicates)
}
//表1
listByDate(date: number): Promise<RecordPO[]>{
// 1.查询条件
let predicates = new relationalStore.RdbPredicates(TABLE_NAME)
predicates.equalTo(DATE_COLUMN, date)
// 2.查询
return DbUtil.queryForList(predicates, COLUMNS)
}
//表2
listByDate1(date: number): Promise<RecordPO[]>{
// 1.查询条件
let predicates = new relationalStore.RdbPredicates(TABLE_NAME1)
predicates.equalTo(DATE_COLUMN1, date)
// 2.查询
return DbUtil.queryForList(predicates, COLUMNS1)
}
// 新增表 2 的更新方法
// updateUserProfiles(predicates: relationalStore.RdbPredicates, updatedValues: { nickname: string, gender: string, location: string }): Promise<void> {
// return DbUtil.update(TABLE_NAME1, predicates, updatedValues);
// }
}
let recordModel = new RecordModel()
export default recordModel as RecordModel
五、结论
本文详细介绍了如何在鸿蒙应用中实现饮食记录和个人信息管理功能,特别是数据库层面的操作。通过RecordService
和RecordModel
类的实现,我们展示了数据的增删改查操作,并在ItemIndex
组件中展示了如何与用户交互。