鸿蒙(HarmonyOS)应用开发——健康生活应用(4)

 

  健康生活应用参考了黑马程序员实战案例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类负责与数据库进行交互,包括建表、插入、删除和查询操作。

  • 建表语句getCreateTableSqlgetCreateTableSql1方法返回建表SQL语句。
  • 插入操作insertinsert1方法将记录或个人信息插入到对应的表中。
  • 删除操作deleteByIddeleteById1方法根据ID删除记录。
  • 查询操作listByDatelistByDate1方法根据日期查询记录。

2、数据库表创建

数据库表的创建是通过执行相应的SQL语句完成的,例如CREATE_TABLE_SQLCREATE_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

五、结论

本文详细介绍了如何在鸿蒙应用中实现饮食记录和个人信息管理功能,特别是数据库层面的操作。通过RecordServiceRecordModel类的实现,我们展示了数据的增删改查操作,并在ItemIndex组件中展示了如何与用户交互。

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值