鸿蒙开发:关系型数据库封装之增删改查
数据量较少的持久化存储,我们可以选择用户首选项或者是分布式键值数据库进行操作,如果前两种无法满足,在鸿蒙当中,也给我们提供了关系型数据库进行数据之间的操作,和Android中类似,关系型数据库基于SQLite组件,提供了一套完整的对本地数据库进行管理的机制,也对外提供一系列的增、删、改、查等接口,非常的方便,为了针对数据更加方便的操作,目前对系统的Api做了一层简单的封装。数据库创建,在初始化的时
数据量较少的持久化存储,我们可以选择用户首选项或者是分布式键值数据库进行操作,如果前两种无法满足,在鸿蒙当中,也给我们提供了关系型数据库进行数据之间的操作,和Android中类似,关系型数据库基于SQLite组件,提供了一套完整的对本地数据库进行管理的机制,也对外提供一系列的增、删、改、查等接口,非常的方便,为了针对数据更加方便的操作,目前对系统的Api做了一层简单的封装。
一、远程地址依赖
在工程的oh-package.json5中设置三方包依赖,配置示例如下:
"dependencies": { "@abner/datastore": "^1.0.4"}
OpenHarmony三方库中心仓地址: https://ohpm.openharmony.cn/#/cn/detail/@abner%2Fdatastore
二、数据库创建和表创建
1、数据库创建
数据库创建,在初始化的时候,会默认创建,在AbilityStage里初始化即可。
DbUtil.getInstance().init(this.context)
属性介绍

storeConfig

DD一下:在探索鸿蒙系统的学习过程中,不少人都曾遇到过各种棘手问题。小编结合自身学习与实践经历,将容易踩坑的环节和对应的解决思路整理成攻略,希望这些经验分享能为同样在学习鸿蒙的伙伴们提供一些参考和帮助:请移步前往小编:鸿蒙全栈开发学习指南
1.鸿蒙全栈开发学习路线
2.OpenHarmony开发基础
3.OpenHarmony北向开发环境搭建
4.鸿蒙南向开发环境的搭建
5.鸿蒙生态应用开发白皮书V2.0 & V3.0
6.鸿蒙开发面试真题(含参考答案)
7.TypeScript入门学习手册
8.OpenHarmony 经典面试题(含参考答案)
9.OpenHarmony设备开发入门【最新版】
10.沉浸式剖析OpenHarmony源代码
11.系统定制指南
12.【OpenHarmony】Uboot 驱动加载流程
13.OpenHarmony构建系统--GN与子系统、部件、模块详解
14.ohos开机init启动流程
15.鸿蒙版性能优化指南
......

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
在对象操作的增删改查中,这个方法忽视不得,可执行属性如下:

四、使用总结
每个方法都预留了多种调用方式,比如使用callback异步回调或者使用Promise异步回调,亦或者同步执行,大家在使用的过程中,可以根据自身业务需要进行选择性调用,也分别暴露了成功和失败的方法,可以针对性的判断在执行的过程中是否执行成功。
如下案例:
DbUtil.getInstance().delete(deleteRdbPredicates,
(rows: number)=>{
//成功
},
(err: BusinessError)=>{
//失败
})
更多推荐
所有评论(0)