【鸿蒙实战开发】如何使用关系型数据库进行关联查询

关系型数据库(@ohos.data.relationalStore)详解

在HarmonyOS中,关系型数据库(Relational Database,RDB)是基于SQLite组件提供的一套完整的本地数据库管理机制。它对外提供了一系列的增、删、改、查等接口,并且支持直接运行用户输入的SQL语句来满足复杂的场景需求。该模块支持的基本数据类型包括number、string、二进制类型数据、boolean,并且建议一条数据不要超过2M以确保插入并读取数据成功。

获取完整版高清学习资料,请点击→鸿蒙全栈开发学习资料(安全链接,请放心点击)

主要功能

1.RdbPredicates:用于定义数据库操作条件,代表数据实体的性质、特征或者数据实体之间关系的词项。
2.RdbStore:提供管理关系数据库(RDB)方法的接口。
3.ResultSet:提供用户调用关系型数据库查询接口之后返回的结果集合。

模块导入示例

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

获取RdbStore示例

let store: relationalStore.RdbStore | undefined = undefined;
let context = getContext(this);
const STORE_CONFIG: relationalStore.StoreConfig = { name: "RdbTest.db", securityLevel: relationalStore.SecurityLevel.S1 };
relationalStore.getRdbStore(context, STORE_CONFIG, (err: BusinessError, rdbStore: relationalStore.RdbStore) => {
  store = rdbStore;
  if (err) {
    console.error(`Get RdbStore failed, code is ${err.code},message is ${err.message}`);
    return;
  }
  console.info('Get RdbStore successfully.');
})

删除RdbStore示例

relationalStore.deleteRdbStore(context, "RdbTest.db", (err: BusinessError) => {
  if (err) {
    console.error(`Delete RdbStore failed, code is ${err.code},message is ${err.message}`);
    return;
  }
  store = undefined;
  console.info('Delete RdbStore successfully.');
})

数据库操作示例

创建RdbPredicates对象:

let predicates = new relationalStore.RdbPredicates("EMPLOYEE");

设置查询条件:

predicates.lessThan("AGE", 20);
predicates.greaterThanOrEqualTo("AGE", 18);
predicates.lessThanOrEqualTo("AGE", 20);
排序:
predicates.orderByAsc("NAME");
predicates.orderByDesc("AGE");
去重:
predicates.equalTo("NAME", "Rose").distinct();
限制返回记录数:
predicates.equalTo("NAME", "Rose").limitAs(3);
设置结果起始位置:
predicates.equalTo("NAME", "Rose").offsetAs(3);
分组:
predicates.groupBy(["AGE", "NAME"]);
使用索引:
predicates.indexedBy("SALARY");
范围查询:
predicates.in("AGE", [18, 20]);
predicates.notIn("NAME", ["Lisa", "Rose"]);

错误码和数据库操作

错误码:包括通用错误码和关系型数据库错误码,如参数错误、内部错误、数据库损坏等。
事务处理:包括beginTransaction()、commit()和rollback()等方法。
备份与恢复:使用backup()和restore()方法。
分布式表设置:使用setDistributedTables()和obtainDistributedTableName()方法。
数据同步:使用sync()和cloudSync()方法。

代码示例

// 远程查询示例
(store as relationalStore.RdbStore).remoteQuery(deviceId, "EMPLOYEE", predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"])
.then((resultSet: relationalStore.ResultSet) => {
    console.info(`ResultSet column names: ${resultSet.columnNames}, column count: ${resultSet.columnCount}`);
    while (resultSet.goToNextRow()) {
        const id = resultSet.getLong(resultSet.getColumnIndex("ID"));
        const name = resultSet.getString(resultSet.getColumnIndex("NAME"));
        const age = resultSet.getLong(resultSet.getColumnIndex("AGE"));
        const salary = resultSet.getDouble(resultSet.getColumnIndex("SALARY"));
        console.info(`id=${id}, name=${name}, age=${age}, salary=${salary}`);
    }
    resultSet.close();
})
.catch((err: BusinessError) => {
    console.error(`Failed to remoteQuery, code is ${err.code},message is ${err.message}`);
});

如何在关系型数据库中进行关联查询

在关系型数据库中进行关联查询是一个常见的需求,它允许我们从多个表中检索数据,并根据这些表之间的共同字段将它们组合起来。在HarmonyOS的@ohos.data.rdb模块中,虽然没有直接提供SQL语句的执行接口,但提供了类似的功能通过RdbPredicates和RdbStore接口来实现。

步骤和知识点

1.创建RdbPredicates对象:

使用new data_rdb.RdbPredicates(tableName)创建一个谓词对象,其中tableName是数据库中的表名。

2.设置查询条件:

使用谓词对象的方法(如equalTo, in, notIn等)设置查询条件。这些方法允许你指定字段和值,以便进行精确或范围查询。

3.执行查询:

使用RdbStore的query方法执行查询。这个方法接受一个RdbPredicates对象,并返回一个Promise,该Promise解析为查询结果。

代码示例和解释

let predicates = new data_rdb.RdbPredicates("EMPLOYEE");
predicates.equalTo("DEPT_ID", 100); // 假设DEPT_ID是部门表和员工表共有的字段

rdbStore.query(predicates, (err, resultSet) => {
    if (err) {
        console.error("Query failed: " + err);
        return;
    }
    // 处理查询结果
    for (let i = 0; i < resultSet.columnCount; i++) {
        let columnName = resultSet.getColumnName(i);
        console.log("Column: " + columnName);
    }
    while (resultSet.goToNextRow()) {
        for (let i = 0; i < resultSet.columnCount; i++) {
            let value = resultSet.getRowData(i);
            console.log(columnName + ": " + value);
        }
    }
});

在这个示例中,我们首先创建了一个RdbPredicates对象,并设置了查询条件(员工表中DEPT_ID等于100的记录)。然后,我们使用RdbStore的query方法执行查询,并处理返回的结果集。

总结

通过使用RdbPredicates设置查询条件和RdbStore执行查询,你可以在HarmonyOS的关系型数据库中实现复杂的关联查询,类似于传统SQL中的JOIN操作。这种方法虽然不同于直接编写SQL语句,但提供了灵活性和对查询条件的精细控制。

写在最后

有很多小伙伴不知道该从哪里开始学习鸿蒙开发技术?也不知道鸿蒙开发的知识点重点掌握的又有哪些?自学时频繁踩坑,导致浪费大量时间。结果还是一知半解。所以有一份实用的鸿蒙(HarmonyOS NEXT)全栈开发资料用来跟着学习是非常有必要的。

获取完整版高清学习资料,请点击→鸿蒙全栈开发学习资料(安全链接,请放心点击)

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了

最新鸿蒙全栈开发学习线路在这里插入图片描述

鸿蒙HarmonyOS开发教学视频

在这里插入图片描述

大厂面试真题

在这里插入图片描述

在这里插入图片描述

鸿蒙OpenHarmony源码剖析

在这里插入图片描述

这份资料能帮住各位小伙伴理清自己的学习思路,更加快捷有效的掌握鸿蒙开发的各种知识。有需要的小伙伴自行领取,,先到先得~无套路领取!!

获取这份完整版高清学习资料,请点击→鸿蒙全栈开发学习资料(安全链接,请放心点击)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值