HarmonyOs开发:关系型数据库封装之增删改查

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 每个方法都预留了多种调用方式,比如使用callback异步回调或者使用Promise异步回调,亦或者同步执行,大家在使用的过程中,可以根据自身业务需要进行选择性调用,也分别暴露了成功和失败的方法,可以针对性的判断在执行的过程中是否执行成功。

前言


数据量较少的持久化存储,我们可以选择用户首选项或者是分布式键值数据库进行操作,如果前两种无法满足,在鸿蒙当中,也给我们提供了关系型数据库进行数据之间的操作,和Android中类似,关系型数据库基于SQLite组件,提供了一套完整的对本地数据库进行管理的机制,也对外提供一系列的增、删、改、查等接口,非常的方便,为了针对数据更加方便的操作,目前对系统的Api做了一层简单的封装。


本篇的内容大致如下:


1、远程地址依赖

2、数据库创建和表创建

3、数据库增删改查

4、使用总结

一、远程地址依赖

在工程的oh-package.json5中设置三方包依赖,配置示例如下:

"dependencies": { "@abner/datastore": "^1.0.0"}



二、数据库创建和表创建

1、数据库创建

数据库创建,在初始化的时候,会默认创建,在AbilityStage里初始化即可。

DbUtil.getInstance().init(this.context)

属性介绍

属性

类型

概述

context

Context

上下文

storeConfig

relationalStore.StoreConfig

数据库相关配置,可默认不传,会创建一个默认的abner_data.db数据库,securityLevel为S3,encrypt为true。

storeConfig

属性

类型

概述

name

string

数据库文件名,也是数据库唯一标识符。

securityLevel

SecurityLevel

设置数据库安全级别。

encrypt

boolean

指定数据库是否加密,默认不加密。true:加密。false:非加密。

dataGroupId

string

应用组ID,需要向应用市场获取。模型约束: 此属性仅在Stage模型下可用。从API version 10开始,支持此可选参数。指定在此dataGroupId对应的沙箱路径下创建RdbStore实例,当此参数不填时,默认在本应用沙箱目录下创建RdbStore实例。

customDir

string

数据库自定义路径。使用约束: 数据库路径大小限制为128字节,如果超过该大小会开库失败,返回错误。

autoCleanDirtyData

boolean

指定是否自动清理云端删除后同步到本地的数据,true表示自动清理,false表示手动清理,默认自动清理。

2、数据表创建

数据表的创建有两种方式,一种是sql语句执行,一种是对象形式执行。

sql语句执行

DbUtil.getInstance()
  .executeSql("CREATE TABLE table_name(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(50),age INT)")

对象形式执行【推荐】

对象形式,弱化了sql语句,但本身还是以sql的形式进行创建数据表,只是业务层的操作,没有了sql操作,执行很是简单直观,第一个参数是数据表的名字也就是table_name,第二个参数是一个对象,也就是数据表的字段,每个字段,需要指定其数据类型等必要的参数,比如主键,自增,长度等等。

DbUtil.getInstance().createTable("table_name", {
  "id": { type: DbTableFieldType.INTEGER, isPrimaryKey: true, isAutoIncrement: true },
  "name": { type: DbTableFieldType.VARCHAR, length: 120 },
  "age": { type: DbTableFieldType.INT, length: 30 }
})

三、数据库增删改查

1、增

普通存储

需要定义ValuesBucket对象进行传递。

const valueBucket1: ValuesBucket = {
  'name': "AbnerMing",
  'age': 18,
}
DbUtil.getInstance().insert("table_name", valueBucket1)

对象存储

let bean = new DbDataBean()
bean.name = "AbnerMing"
bean.age = 18
DbUtil.getInstance().insertBean("table_name", bean)

2、删

普通删除

需要用RdbPredicates对象进行设置过滤条件,可以直接查看官网Api即可。

let deleteRdbPredicates = new relationalStore.RdbPredicates("table_name");
deleteRdbPredicates.equalTo("id", 1);
DbUtil.getInstance().delete(deleteRdbPredicates)

对象删除

和普通删除类似,只不过RdbPredicates对象做了简单封装,需要调用filterRdbPredicates方法进行设置过滤条件。

DbUtil.getInstance()
  .filterRdbPredicates({ equalTo: { "id": 2 } })
  .deleteBean("table_name")

3、改

普通修改

const valueBucket: ValuesBucket = {
  'name': "ming",
  'age': 28,
}
let upDataRdbPredicates = new relationalStore.RdbPredicates("table_name");
upDataRdbPredicates.equalTo("id", 1)
DbUtil.getInstance().update(upDataRdbPredicates, valueBucket)

对象修改

filterRdbPredicates方法为过滤条件,也就是你要更改哪一条数据。

let uBean = new DbDataBean()
uBean.name = "Ming"
uBean.age = 20
DbUtil.getInstance()
  .filterRdbPredicates({ equalTo: { "id": 2 } })
  .updateBean("table_name", uBean)

4、查

普通查询

let predicates = new relationalStore.RdbPredicates("table_name");
DbUtil.getInstance().query(predicates, (resultSet: relationalStore.ResultSet) => {
  // resultSet是一个数据集合的游标,默认指向第-1个记录,有效的数据从0开始。
  while (resultSet.goToNextRow()) {
    const id = resultSet.getLong(resultSet.getColumnIndex("id"));
    const name = resultSet.getString(resultSet.getColumnIndex("name"));
    const age = resultSet.getLong(resultSet.getColumnIndex("age"));
  }
})

对象查询

获取全部

DbUtil.getInstance()
  .queryAllBean<DbDataBean>("table_name", (data) => {
  })

获取单个

DbUtil.getInstance()
  .filterRdbPredicates({ equalTo: { "id": 1 } })
  .queryBean<DbDataBean>("table_name", (data) => {
  })

5、filterRdbPredicates

在对象操作的增删改查中,这个方法忽视不得,可执行属性如下:

属性

类型

概述

orderByDesc

string

配置谓词以匹配数据表的field列中值按降序排序的列。

orderByAsc

string

配置谓词以匹配数据表的field列中值按升序排序的列。

limitAs

number

设置最大数据记录数的谓词

offsetAs

number

配置谓词以指定返回结果的起始位置

equalTo

{}

配置谓词以匹配数据表的field列中值为value的字段。

notEqualTo

{}

配置谓词以匹配数据表的field列中值不为value的字段

contains

{}

配置谓词以匹配数据表的field列中包含value的字段

between

{}

配置谓词以匹配数据表的field列中值在给定范围内的字段(包含范围边界),例如:low=high,必须要带等号。

四、使用总结

每个方法都预留了多种调用方式,比如使用callback异步回调或者使用Promise异步回调,亦或者同步执行,大家在使用的过程中,可以根据自身业务需要进行选择性调用,也分别暴露了成功和失败的方法,可以针对性的判断在执行的过程中是否执行成功。


如下案例:

DbUtil.getInstance().delete(deleteRdbPredicates,
                            (rows: number)=>{
                              //成功
                            },
                            (err: BusinessError)=>{
                              //失败
                            })
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1天前
|
存储 人工智能 JavaScript
Harmony OS开发-ArkTS语言速成二
本文介绍了ArkTS基础语法,包括三种基本数据类型(string、number、boolean)和变量的使用。重点讲解了let、const和var的区别,涵盖作用域、变量提升、重新赋值及初始化等方面。期待与你共同进步!
56 47
Harmony OS开发-ArkTS语言速成二
|
2天前
|
索引
鸿蒙开发:自定义一个股票代码选择键盘
金融类的软件,特别是股票基金类的应用,在查找股票的时候,都会有一个区别于正常键盘的键盘,也就是股票代码键盘,和普通键盘的区别就是,除了常见的数字之外,也有一些常见的股票代码前缀按钮,方便在查找股票的时候,更加方便的进行检索。
鸿蒙开发:自定义一个股票代码选择键盘
|
2天前
鸿蒙开发:自定义一个英文键盘
实现方式呢,有很多种,目前采用了比较简单的一种,如果大家采用网格Grid组件实现方式,也是可以的,但是需要考虑每行的边距以及数据,还有最后两行的格子占位问题。
鸿蒙开发:自定义一个英文键盘
|
1天前
|
前端开发 API 数据库
鸿蒙开发:异步并发操作
在结合async/await进行使用的时候,有一点需要注意,await关键字必须结合async,这两个是搭配使用的,缺一不可,同步风格在使用的时候,如何获取到错误呢,毕竟没有catch方法,其实,我们可以自己创建try/catch来捕获异常。
鸿蒙开发:异步并发操作
|
1天前
|
API
鸿蒙开发:实现popup弹窗
目前提供了两种方式实现popup弹窗,主推系统实现的方式,几乎能满足我们常见的所有场景,当然了,文章毕竟有限,尽量还是以官网为主。
鸿蒙开发:实现popup弹窗
|
2天前
鸿蒙开发:自定义一个车牌字母键盘
车牌字母键盘和一般的键盘还有很大区别的,大家可以发现,键盘上是少一个字母的,因为I字母具有混淆性,所以这个字母是不在车牌键盘内的。
鸿蒙开发:自定义一个车牌字母键盘
|
2天前
|
存储 前端开发 关系型数据库
鸿蒙开发:实现键值数据库存储
对于数据量比较的小的,我们直接选择轻量级的用户首选项方式即可,而对于数据量比较大的情况下,直接可以使用数据库,而对于相对来说,比较大的数据,我们就可以使用键值型数据库方式
|
2天前
|
开发框架 物联网 API
HarmonyOS开发:串行通信开发详解
在电子设备和智能系统的设计中,数据通信是连接各个组件和设备的核心,串行通信作为一种基础且广泛应用的数据传输方式,因其简单、高效和成本效益高而被广泛采用。HarmonyOS作为一个全场景智能终端操作系统,不仅支持多种设备和场景,还提供了强大的开发框架和API,使得开发者能够轻松实现串行通信功能。随着技术的不断进步,串行通信技术也在不断发展。在HarmonyOS中,串行通信的开发不仅涉及到基本的数据发送和接收,还包括设备配置、错误处理和性能优化等多个方面。那么本文就来深入探讨在HarmonyOS中如何开发串行通信应用,包括串行通信的基础知识、HarmonyOS提供的API、开发步骤和实际代码示例
16 2
|
2天前
鸿蒙语言开发 几十套鸿蒙ArkTs app毕业设计及课程作业
鸿蒙语言开发 几十套鸿蒙ArkTs app毕业设计及课程作业
11 1
|
10天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
34 3

热门文章

最新文章