首页 > 数据库 >鸿蒙数据持久化sqlite

鸿蒙数据持久化sqlite

时间:2024-10-11 13:23:38浏览次数:1  
标签:sqlite 持久 name 鸿蒙 relationalStore let rdbStore id TaskInfo

1. 数据查询model: entry/src/main/model/TaskModel.ets

import relationalStore from '@ohos.data.relationalStore';
import { common } from '@kit.AbilityKit';
import TaskInfo from '../ets/viewModel/TaskInfo';

class TaskModel {
  private rdbStore: relationalStore.RdbStore | undefined
  private tableName: string = 'TASK'

  /**
   * 初始化任务表
   */
  initTaskDB(context: common.UIAbilityContext) {
    // 1. rdb配置
    const config: relationalStore.StoreConfig = {
      name: 'MyApplication.db',
      securityLevel: relationalStore.SecurityLevel.S1
    }
    // 2. 初始化sql语句
    const sql = `CREATE TABLE IF NOT EXISTS TASK(
                   ID INTEGER PRIMARY KEY AUTOINCREMENT,
                   NAME TEXT NOT NULL,
                   FINISHED bit
                  )`
    // 3. 获取rdb
    relationalStore.getRdbStore(context, config, (err, rdbStore: relationalStore.RdbStore) => {
      if (err) {
        console.log('testTag', '获取rdbStore失败')
      }

      rdbStore.executeSql(sql)
      this.rdbStore = rdbStore
      console.error("testTag","数据库初始化成功")
    })
  }

  /**
   * 查询任务数据
   */
  getTaskList(): Array<TaskInfo> {
    let tasks: TaskInfo[] = []
    let predicates = new relationalStore.RdbPredicates(this.tableName)
    /*构建查询条件*/
    // predicates.equalTo('id','1')
    /*查询数据*/
    if (this.rdbStore !== undefined) {
      let result = this.rdbStore.querySync(predicates, ['ID', 'NAME', 'FINISHED'])
      while (!result.isAtLastRow) { /*循环结果集*/
        result.goToNextRow()
        let id = result.getLong(result.getColumnIndex('ID'))
        let name = result.getString(result.getColumnIndex('NAME'))
        let finished = result.getLong(result.getColumnIndex('FINISHED'))
        let task = new TaskInfo(id, name, !!finished)
        tasks.push(task)
      }
    }
    return tasks;
  }

  /**
   * 添加任务
   */
  addTask(name: string) {
    return this.rdbStore?.insert(this.tableName, { name, finished: false })
  }

  /**
   * 更新任务状态
   */
  updateTaskStatus(id: number, finished: boolean) {
    let predicates = new relationalStore.RdbPredicates(this.tableName)
    predicates.equalTo('ID', id)
    return this.rdbStore?.update({ finished }, predicates)
  }

  /**
   * 删除任务
   */
  delTaskById(id: number) {
    let predicates = new relationalStore.RdbPredicates(this.tableName)
    predicates.equalTo('ID', id)
    return this.rdbStore?.delete(predicates)
  }
}

let taskModel = new TaskModel()

export default taskModel as TaskModel

2. 数据类:entry/src/main/ets/viewModel/TaskInfo.ets

export default class TaskInfo {
  id: number
  name: string
  finished: boolean

  constructor(id: number, name: string, finished: boolean = false) {
    this.id = id
    this.name = name
    this.finished = finished
  }
}

3. 初始化数据表 entry/src/main/ets/entryability/EntryAbility.ets 中 onWindowStageCreate 方法中添加

/*初始化数据表*/
 taskModel.initTaskDB(this.context)

4. 使用增删改查:entry/src/main/ets/pages/Sqlite.ets

import taskModel from '../../model/TaskModel'
import TaskInfo from '../viewModel/TaskInfo'
import { JSON } from '@kit.ArkTS';

@Entry
@Component
struct Sqlite {
  @State message: string = 'Hello World';

  build() {
    Column() {
      Button("添加数据").onClick(() => {
        taskModel.addTask('任务1')
      })
      Button("修改数据").onClick(() => {
          taskModel.updateTaskStatus(1,true)
        })
      Button("查询数据").onClick(() => {
        let res:TaskInfo[] = taskModel.getTaskList()
        console.info('taskList',JSON.stringify(res))
      })
      Button("删除数据").onClick(() => {
        taskModel.delTaskById(1)
      })

    }
    .height('100%')
    .width('100%')
  }
}

 

标签:sqlite,持久,name,鸿蒙,relationalStore,let,rdbStore,id,TaskInfo
From: https://www.cnblogs.com/longfeiPHP/p/18458160

相关文章

  • 鸿蒙初学001-构建第一个ArkTS应用(Stage模型)
    https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/application-dev-guide-V5HarmonyOSSDK介绍:从HarmonyOSNEXTDeveloperPreview1(API11)版本开始,HarmonyOSSDK以Kit维度提供丰富、完备的开放能力,涵盖应用框架、系统、媒体、图形、应用服务、AI六大领域,例如......
  • 鸿蒙首选项数据持久化
    1.ets/common/util/PreferencesUtils.etsimport{common}from'@kit.AbilityKit';import{preferences}from'@kit.ArkData';classPreferencesUtil{prefMap:Map<string,preferences.Preferences>=newMap()/*加载首选项*/lo......
  • 安装了sqlite3依赖,编译源码报No package 'sqlite3' found
    如果已经安装了SQLite3.44.0,但在运行./configure时仍然出现“Nopackage'sqlite3'found”的错误,这通常是因为pkg-config没有找到相应的SQLite开发文件(.pc文件)。可按照以下步骤检查和修复此问题:1.确保pkg-config已安装首先,确认系统上安装了pkg-config工具:sudoyuminstall......
  • 鸿蒙NEXT开发-沉浸式导航和键盘避让模式(基于最新api12稳定版)
    注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识专栏地址:https://blog.csdn.net/qq_56760790/category_12794123.html目录1.沉浸式导航1.1基本介绍1.2如......
  • Django替换sqlite默认数据库到mysql的一系列操作
    将这部分注释掉:DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3','NAME':BASE_DIR/'db.sqlite3',}} 并替换为:DATABASES={'default':{......
  • 【Unity】数据持久化PlayerPrefs
    PlayerPrefs存储数据,数据为[key-value]形式可以用保存用户的设置、偏好;历史得分数据等;保存的数据位置不同的系统数据将被保存在不同的位置。Windows系统保存的数据将会被存储在系统注册表中,位置如下:(编辑器运行模式)\HKEY_CURRENT_USER\SOFTWARE\Unity\UnityEditor\DefaultCom......
  • sqlite_action
     CREATETRIGGERhttps://www.sqlite.org/lang_createtrigger.html 触发器DROPTABLEIFEXISTSuser_token;CREATETABLEIFNOTEXISTSuser_token(idINTEGERNOTNULLPRIMARYKEYAUTOINCREMENT,tokenTEXTNULL,"uid"INTEGERNULL,"cid"INTEGER......
  • 字节预热智能硬件 Ola Friend,预计为智能耳机;鸿蒙 NEXT 公测正式开启,微信邀请内测丨RTE
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代......
  • 鸿蒙开发状态管理示例
    @ObservedclassTask{staticid:number=1/*任务序号静态属性*/name:string=`任务${Task.id++}`finished:boolean=false}/*统一样式*/@Stylesfunctioncard(){.width('95%').padding(20).backgroundColor(Color.White).borderRadius(15)......
  • 鸿蒙 Next 实战: 烟花模拟器
    前言通过上一篇文章可以看出,要在鸿蒙应用中实现特别炫的特效还是比较复杂。动画固然重要,但如果在赶工期的情况下,大家都会优先业务,那有没有简单快速的方法呢?有的,也用像Android和iOS里WebView的方式,h5的特效现在是应有尽有,把他嵌入鸿蒙Next应用里就可以,那如何在鸿蒙Next......