【鸿蒙开发】关系型数据库 原创

Aisanyi
发布于 2025-6-21 21:26
浏览
0收藏

前言

关系型数据库(Relational Database,RDB)是一种基于关系模型来管理数据的数据库。关系型数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查等接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需要。

该模块提供以下常用功能

  • RdbPredicates:数据库中用来代表数据实体的性质、特征或者数据实体之间关系的词项,主要用来定义数据库的操作条件。
  • RdbStore:提供管理关系数据库(RDB)方法的接口。
  • ResultSet:提供用户调用关系型数据库查询接口之后返回的结果集合。
  • Transaction:提供管理事务对象的接口。

注意事项

  • 一条数据不超过2MB
  • 单次查询数据量不超过5000条。
  • 在TaskPool中查询
  • 拼接SQL语句尽量简洁
  • 合理地分批次查询。

文档

官网文档很详细,但是不利于我统一去查找方法,所以自己将方法总结一下

RdbPredicates

表示关系型数据库(RDB)的谓词。该类确定RDB中条件表达式的值是true还是false。谓词间支持多语句拼接,拼接时默认使用and()连接。不支持Sendable跨线程传递。

方法

方法 描述
inDevices 同步分布式数据库时连接到组网内指定的远程设备
inAllDevices 同步分布式数据库时连接到组网内所有的远程设备。
equalTo 设置条件等于
notEqualTo 不等于
beginWrap 括号开始
endWrap 括号结束
or 或者
and 并且
contains 包含
beginsWith 以什么开头
endsWith 以什么结尾
isNull 为空
isNotNull 不为空
like 模糊匹配
glob 通配符匹配
between 给定范围区间,( q <= n <= p )
notBetween 不包含给定范围
greaterThan 大于
lessThan 小于
greaterThanOrEqualTo 大于或等于
lessThanOrEqualTo 小于或等于
orderByAsc 升序
orderByDesc 降序
distinct 过滤重复记录
limitAs 设置最大数量
offsetAs 查询返回的起始位置
groupBy 分组查询
indexedBy 指定索引列
in 值在给定范围内
notIn 值不在给定范围
notContains 不包含什么
notLike 不符合模糊匹配的数据
having 筛选符合条件的分组数据(api20以上)

RdbStore

提供管理关系数据库(RDB)方法的接口。

在使用以下相关接口前,请使用executeSql接口初始化数据库表结构和相关数据。

属性

名称 类型 只读 可选 说明
version10+ number 设置和获取数据库版本,值为大于0的正整数。
rebuilt12+ RebuildType 用于获取数据库是否进行过重建或修复。

方法

方法 说明
insert 向目标表里插入一行数据
insertSync 向目标表中插入一行数据(同步)
batchInsert 向目标表中插入一组数据
batchInsertSync 向目标表中插入一组数据,可以通过conflict参数指定冲突解决模式(Api18以上)
batchInsertSync 向目标表中插入一组数据,可以通过conflict参数指定冲突解决模式(Api18以上、同步)
update 根据RdbPredicates的指定实例对象更新数据库中的数据
updateSync 根据RdbPredicates的指定实例对象更新数据库中的数据(同步)
delete 根据RdbPredicates的指定实例对象从数据库中删除数据
deleteSync 根据RdbPredicates的指定实例对象从数据库中删除数据(同步)
query 根据指定条件查询数据库中的数据
querySync 根据指定条件查询数据库中的数据(同步)
remoteQuery 根据指定条件查询远程设备数据库中的数据
querySql 根据指定SQL语句查询数据库中的数据,SQL语句中的各种表达式和操作符之间的关系操作符号不超过1000个
querySqlSync 根据指定SQL语句查询数据库中的数据,SQL语句中的各种表达式和操作符之间的关系操作符号不超过1000个(同步)
executeSql 执行包含指定参数但不返回值的SQL语句,语句中的各种表达式和操作符之间的关系操作符号不超过1000个
execute 执行包含指定参数的SQL语句,语句中的各种表达式和操作符之间的关系操作符号不超过1000个,返回值类型为ValueType
executeSync 执行包含指定参数的SQL语句,语句中的各种表达式和操作符之间的关系操作符号不超过1000个,返回值类型为ValueType。(同步)
getModifyTime 获取数据库表中数据的最后修改时间
beginTransaction 在开始执行SQL语句之前,开始事务
beginTrans 在开始执行SQL语句之前,开始事务
createTransaction 创建一个事务对象并开始事务(api14以上、优先使用)
commit 提交已执行的SQL语句,跟beginTransaction配合使用。
rollBack 回滚已经执行的SQL语句,跟beginTransaction配合使用。
rollback 回滚已经执行的SQL语句,跟beginTrans配合使用。
backup 以指定名称备份数据库
restore 从指定的数据库备份文件恢复数据库
setDistributedTables 设置分布式数据库表
obtainDistributedTableName 根据远程设备的本地表名获取指定远程设备的分布式表名。在查询远程设备数据库时,需要使用分布式表名
sync 在设备之间同步数据
cloudSync 手动执行对所有分布式表的端云,使用该接口需要实现云服务功能。
on 注册数据库的进程内或者进程间事件监听
off 取消数据变更的事件监听
emit 通知通过on注册的进程间或者进程内监听事件
cleanDirtyData 清理云端删除的数据同步到本地后,未自动清理的,且数据的游标(cursor)小于指定游标的数据。
cleanDirtyData 清理云端删除的数据同步到本地后,未自动清理的所有数据。
attach 将一个数据库文件附加到当前数据库中,以便在SQL语句中可以直接访问附加数据库中的数据。
detach 将附加数据库分离
lockRow 根据RdbPredicates的指定实例对象从数据库中锁定数据,锁定数据不执行端云同步
unlockRow 根据RdbPredicates的指定实例对象从数据库中解锁数据
queryLockedRow 根据指定条件查询数据库中锁定的数据
close 关闭数据库
rekey 手动更新加密数据库的密钥

事件

事件名 描述
dataChange 数据库的数据变更的事件监听
autoSyncProgress 云端自动同步进度通知,自动同步进行时调用回调
statistics sql执行时间的统计
sqliteErrorOccurred 执行SQL语句时的异常日志(api20以上)
perfStat 统计执行SQL的时间(事务结束)。

ResultSet

提供通过查询数据库生成的数据库结果集的访问方法。结果集是指用户调用关系型数据库查询接口之后返回的结果集合,提供了多种灵活的数据访问方式,以便用户获取各项数据。

都需先使用queryquerySqlremoteQueryqueryLockedRow等query类方法中任一方法获取到ResultSet实例

属性

名称 类型 必填 说明
columnNames string[] 获取结果集中所有列的名称。
columnCount number 获取结果集中列的数量。
rowCount number 获取结果集中行的数量。
rowIndex number 获取结果集当前行的索引位置,默认值为-1。索引位置下标从0开始。
isAtFirstRow boolean 检查结果集指针是否位于第一行(行索引为0),true表示位于第一行,false表示不位于第一行。
isAtLastRow boolean 检查结果集指针是否位于最后一行,true表示位于最后一行,false表示不位于最后一行。
isEnded boolean 检查结果集指针是否位于最后一行之后,true表示位于最后一行之后,false表示不位于最后一行之后。
isStarted boolean 检查指针是否移动过,true表示指针已移动过,false表示指针未移动过。
isClosed boolean 检查当前结果集是否关闭,true表示结果集已关闭,false表示结果集未关闭。

方法

方法名 描述
getColumnIndex 根据指定的列名获取列索引
getColumnName 根据指定的列索引获取列名
getColumnType 根据指定的列索引或列名称获取列数据类型
getColumnTypeSync 根据指定的列索引或列名称获取列数据类型。(同步方法,api18以上)
goTo 指定相对当前结果集指针位置的偏移量,以移动结果集的指针位置。
goToRow 转到结果集的指定行。
goToFirstRow 转到结果集的第一行
goToLastRow 转到结果集的最后一行
goToNextRow 转到结果集的下一行
goToPreviousRow 转到结果集的上一行
getValue 返回当前行指定列的值
getBlob 返回当前行指定列的值 (字节数组形式)
getString 以字符串形式获取当前行中指定列的值
getLong 以Long形式获取当前行中指定列的值
getDouble 以double形式获取当前行中指定列的值
getAsset Asset形式获取当前行中指定列的值
getAssets Assets形式获取当前行中指定列的值
getRow 获取当前行
getRows 从结果集中获取指定数量的数据 (api18以上)
getSendableRow 获取当前行数据的sendable形式,用于跨线程传递。
isColumnNull 检查当前行中指定列的值是否为null。
close 关闭结果集,若不关闭可能会引起fd泄露和内存泄露

Interface (Transaction, api14以上)

提供以事务方式管理数据库的方法。事务对象是通过createTransaction接口创建的,不同事务对象之间的操作是隔离的,不同类型事务的区别见TransactionType 。

当前关系型数据库同一时刻仅支持一个写事务,所以如果当前RdbStore存在写事务未释放,创建IMMEDIATE或EXCLUSIVE事务会返回14800024错误码。如果是创建的DEFERRED事务,则可能在首次使用DEFERRED事务调用写操作时返回14800024错误码。通过IMMEDIATE或EXCLUSIVE创建写事务或者DEFERRED事务升级到写事务之后,RdbStore的写操作也会返回14800024错误码。

当事务并发量较高且写事务持续时间较长时,返回14800024错误码的次数可能会变多,开发者可以通过减少事务占用时长减少14800024出现的次数,也可以通过重试的方式处理14800024错误码。

方法

方法 描述
commit 提交已执行的SQL语句
rollback 回滚已经执行的SQL语句。
insert 向目标表中插入一行数据
insertSync 向目标表中插入一行数据(同步)
batchInsert 向目标表中插入一组数据
batchInsertSync 向目标表中插入一组数据(同步)
batchInsertWithConflictResolution 向目标表中插入一组数据(api18以上)
batchInsertWithConflictResolutionSync 向目标表中插入一组数据(api18以上, 同步)
update 根据RdbPredicates的指定实例对象更新数据库中的数据
updateSync 根据RdbPredicates的指定实例对象更新数据库中的数据(同步)
delete 根据RdbPredicates的指定实例对象从数据库中删除数据
deleteSync 根据RdbPredicates的指定实例对象从数据库中删除数据(同步)
query 根据指定条件查询数据库中的数据
querySync 根据指定条件查询数据库中的数据(同步)
querySql 根据指定SQL语句查询数据库中的数据,SQL语句中的各种表达式和操作符之间的关系操作符号不超过1000个
querySqlSync 根据指定SQL语句查询数据库中的数据,SQL语句中的各种表达式和操作符之间的关系操作符号不超过1000个(同步)
execute 执行包含指定参数的SQL语句,语句中的各种表达式和操作符之间的关系操作符号不超过1000个,返回值类型为ValueType
executeSync 执行包含指定参数的SQL语句,语句中的各种表达式和操作符之间的关系操作符号不超过1000个,返回值类型为ValueType(同步)

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
收藏
回复
举报
回复
    相关推荐