当前位置: 首页 > news >正文

HarmonyOS 数据持久化 关系型数据库之 初始化操作

上文 HarmonyOS 数据持久化之首选项 preferences 我们有说用户首选项
但它只能处理一些比较简单的数据类型结构 的持久化处理
如果是一些批量较大 结构较为复杂的数据结构 那么 首选项就无法满足了 我们就要选择 关系型数据库

通过 SQLite 组件实现的一种本地数据库,具备所有关系型数据库特性 例如(事务 存储过程 视图)等等
因为是本地型数据库 所以不需要网络 性能也非常强大

因为 harmonyOS 关系型数据库 内容 比较复杂 我们分成三个部分

1 初始化数据库
2 对数据库进行 增删改 操作
3 查询操作

那么 我们就先来说 初始化数据库的内容

首先 这个东西 我们要封装起来 成一个类
在模块下的 ets目录 下 创建一个 utils 目录
下面创建一个 relationalClass.ts文件
在这里插入图片描述
然后 我们类基本骨架写成这样


//创建类对象 名称叫 relationalClass
class relationalClass{initTaskDB(context) {}}//new 一个relationalClass类的实力对象
const relational = new relationalClass()
//将实力对象导出
export default relational as relationalClass

然后 我们初始化的逻辑 就要写在 initTaskDB 中 因为初始化 需要UIAbility 中的 上下文 ConText
所以 这里 我们先接这个参数

首先 我们要导包

import relationalStore from "@ohos.data.relationalStore";

这也是 harmonyos 内置的 不需要安装 直接导入就可以用

然后 是做一个 rdb配置

const config = {name:'MyApplication.db',securityLevel: relationalStore.SecurityLevel.S1
}

在这里插入图片描述
这里 对象中 nameo 是我们数据库本地文件名 因为这个相当于是本地文件读写
然偶 securityLevel 字段就是 relationalStore.SecurityLevel 下的 S1 到 S4 值越大 安全级别越高
因为 这里 我们就是做个练习 所以 S1就够用了

键表的话 就用 sql 语句就好了 如果不懂sql 可以参考我的文章
MySQL新建表 演示单表增删查改

const sql = `CREATE TABLE IF NOT EXISTS TASK(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT NOT NULL,FINISHED bit)`

这里 语句发生了 一点点变化

CREATE TABLE IF NOT EXISTS 表名 这句是基本一样的
第一 字段 ID
NTEGER 数字类型
PRIMARY KEY 设置组件唯一记录 不能重复
AUTOINCREMENT 数字属性自增 sql中是 AUTO_INCREMENT 这里 不要中间的横杠了

NAME 字段
这里字符串 变成了 TEXT 文本类型
NOT NULL 非空约束

FINISHED 字段

TASK 表 三个字段

有一些不太一样 但大体还是看得懂的

我们 整体代码 编写如下

//导入 relationalStore 首选项操作对象 这个包是harmonyos自带的 无需安装
import relationalStore from "@ohos.data.relationalStore";//创建类对象 名称叫 relationalClass
class relationalClass{//记录 rdbStore 操作数据库对象private rdbStore:relationalStore.RdbStoreinitTaskDB(context) {// 1.rdb配置const config = {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`// 获取 RDBrelationalStore.getRdbStore(context, config,(err, rdbStore)=> {if(err) {console.log('testTag', "获取rdbstore失败!");return}//执行创建表sqlrdbStore.executeSql(sql);console.log('testTag', "创建表sql执行完毕!");//记录 rdbStarethis.rdbStore = rdbStore;})}}//new 一个relationalClass类的实力对象
const relational = new relationalClass()
//将实力对象导出
export default relational as relationalClass

我们定义了一个成员变量 rdbStore
用于接受 getRdbStore 返回的 rdbStore对象 因为你之后要操作数据库 是需要通过它执行的

然后 我们 initTaskDB中 上来声明了 config 和 sql 内容 这个我们上面讲过
relationalStore.getRdbStore 获取 rdbSore 需要两个参数 UIAbility上下文的 ConText 和 我们上面声明的config
这里 会返回两个参数 如果 err有内容 说明 获取失败了 我们直接输出日志
如果 没有
则 通过 rdbStore.executeSql 执行我们的sql 需要一个sql字符串做参数

成功后 记录 rdbStore

然后 这里 我们找到模块入口文件
导入 我们写的这个类 然后在onCreate 生命周期中 使用我们写的 initTaskDB
传入 我们 UIAbility 上下文的 ConText
在这里插入图片描述

相关文章:

HarmonyOS 数据持久化 关系型数据库之 初始化操作

上文 HarmonyOS 数据持久化之首选项 preferences 我们有说用户首选项 但它只能处理一些比较简单的数据类型结构 的持久化处理 如果是一些批量较大 结构较为复杂的数据结构 那么 首选项就无法满足了 我们就要选择 关系型数据库 通过 SQLite 组件实现的一种本地数据库&#xff0…...

伊芙丽签约实在智能,实在Agent数字员工助力品牌效能飙升

近日,国内知名时尚女装品牌伊芙丽与实在智能达成合作,引入业内领先的平台级自动化产品实在Agent数字员工——取数宝,自动获取天猫、淘宝、抖音等线上平台营销数据,开启全域化营销的“提效之旅”。 实在Agent智能体 伊芙丽集团成立…...

第十五届蓝桥杯-UART接收不定长指令的处理

学习初衷: 不仅仅为了比赛! 目录 一、问题引入 二、UART常用的三种工作模式 1.UART工作在中断模式 2.UART工作在DMA模式下 3.uart工作在接收转空闲的模式下 三、获取指令中需要的数据 四、printf函数的实现 一、问题引入 问题引入:请…...

网络 协议 UDP编程

网络:数据传输,数据共享 1.网络协议模型: OSI协议模型 应用层 实际发送的数据 表示层 发送的数据是否加密 会话层 是否建立会话连接 传输层 数据传输的方式(数据报、流式&#xff09…...

3505. 这也是一道排序题

一、题目 输入 10 7334774857 8461862436 540886577 5245195052 9194400521 5412986878 6694133363 1186771950 1405713915 7115286932 输出 -29430338967 二、思考 构造差分数组:C[i] A[i1] - A[i] 由题目条件可知:当A[i] A[i1] A[i-1] - A[i]时&am…...

【Redis】Redis的应用场景

📝个人主页:五敷有你 🔥系列专栏:Redis ⛺️稳中求进,晒太阳 Redis的应用场景: 限流 要求10s内只能访问一次 RequestMapping("xian")public String xianLiu(String sign){String sign1 …...

计算机网络—以太网接口和链路配置

目录 1.拓扑图 2.以太网交换机基础配置 3.配置手动模式的链路聚合 4.配置静态 LACP 模式的链路聚合 5.配置文件 1.拓扑图 2.以太网交换机基础配置 华为交换机接口默认开启了自协商功能,需要手动配置S1与 S2上G0/0/9和G0/0/10接口的速率。 首先修改交换机的设…...

关于做副业、做自媒体:说几句扎心的话

今天在某乎看到一个问题:想尝试自媒体,想了一个月了,都没想好怎么起步,咋整呀? 恰好昨天陪退休老妈去探店,有感而发,就来唠一唠。 一、退休老妈的副业经历 老妈去年年初开始,在某…...

精通SpringBoot单元测试

引言 单元测试是软件开发中不可或缺的一部分,它对保障代码质量和软件的可靠性起着至关重要的作用。而SpringBoot作为一个流行的Java框架,为开发高效、易于部署的微服务提供了强大的支持。 单元测试的重要性: 确保代码正确性:通过…...

HAProxy 简单介绍

一 HAProxy介绍 (一)发展历史 HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换…...

SpringBoot集成Swagger3.0

一:前言   Swagger 是一个 RESTful API 的开源框架,它的主要目的是帮助开发者设计、构建、文档化和测试 Web API。Swagger 的核心思想是通过定义和描述 API 的规范、结构和交互方式,以提高 API 的可读性、可靠性和易用性,同时降…...

计算机网络-第5章 运输层(1)

主要内容:进程之间的通信与端口、UDP协议、TCP协议、可靠传输原理(停止等待协议、ARQ协议)、TCP报文首部、TCP三大题:滑动窗口、流量控制、拥塞控制机制 5.1 运输层协议概述 运输层向它上面的应用层提供通信服务,真正…...

性能优化-卡牌项目渲染优化

优化的方向 CPU 影响帧率 GPU 影响帧率 内存 超了会崩 显存 显存超了画面会异常,甚至可能导致游戏崩溃 带宽 影响耗电 分辨率 设备性能不行又要求流畅,降低目标渲染分辨率,立竿见影,但是会牺牲画质 场景 1 使用烘焙…...

STM32FreeRTOS任务通知(STM32cube高效开发)

文章目录 一、任务通知(一)任务通知概述1、任务通知可模拟队列和信号量2、任务通知优势和局限性 (二) 任务通知函数1、xTaskNotify()发送通知值不返回先前通知值的函数2、xTaskNotifyFromISR()发送通知函数ISR版本3、x…...

基于element-plus的Dialog选择控件

翻看之前工程师写的vue2的代码,很多都是复制、粘贴,也真是搞不懂,明明可以写一个控件,不就可以重复使用。很多前端总喜欢element搞一下,ant-design也搞一下,有啥意义,控件也不是自己写的&#x…...

手把手教使用静默 搭建Oracle 19c 一主一备ADG集群

一、环境搭建 主机IPora19192.168.134.239ora19std192.168.134.240 1.配置yum源 1.配置网络yum源 1.删除redhat7.0系统自带的yum软件包; rpm -qa|grep yum >oldyum.pkg 备份原信息rpm -qa|grep yum|xargs rpm -e --nodeps 不检查依赖,直接删除…...

使用协程库httpx并发请求

httpx和aiohttp都是比较常用的异步请求库,当然requests多线程或requestsgevent也是不错的选择。 一个使用httpx进行并发请求的脚本如下: import functools import sys import timeimport anyio import httpxasync def fetch(client, results, index) -…...

js的同步异步

JavaScript(JS)是一门单线程的编程语言,这意味着它一次只能处理一个任务。然而,JS 支持同步和异步操作。 同步操作是指代码按照顺序执行,每个操作必须在前一个操作完成后才能进行。这意味着当一个操作在执行时&#x…...

C# MG.CamCtrl 工业相机库(开源) 海康 大恒

C# MG.CamCtrl 相机库(开源) 海康 大恒 介绍工厂模式创建实例选取对应SN号的相机,初始化启动相机取图注销相机参数设置/获取接口 介绍 c# 相机库,含海康、大恒品牌2D相机的常用功能。 底层采用回调信号量模式封装 ,最…...

【Redis】redis的基本使用

📝个人主页:五敷有你 🔥系列专栏:Redis ⛺️稳中求进,晒太阳 Redis的概述 为什么要有redis? redis是数据库,mysql也是数据库,redis做缓存的意义就是为了减轻数据库压力 数据库为什么…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

MMaDA: Multimodal Large Diffusion Language Models

CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

SpringTask-03.入门案例

一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...