HarmonyOS Sample 之 DataAbility RDB数据库操作 原创 精华
目录
DataAbility RDB数据库操作
介绍
使用Data模板的Ability(以下简称“Data”)有助于应用管理其自身和其他应用存储数据的访问,并提供与其他应用共享数据的方法。Data既可用于同设备不同应用的数据共享,也支持跨设备不同应用的数据共享。
数据的存放形式多样,可以是数据库,也可以是磁盘上的文件。Data对外提供对数据的增、删、改、查,以及打开文件等接口,这些接口的具体实现由开发者提供。
本示例演示了如何使用Data Ability对RDB数据库进行增、删、改、查,以及读取文本文件。
模仿手机的备忘录,实现了简单的操作。
搭建环境
安装DevEco Studio,详情请参考DevEco Studio下载。
设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:
如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。
如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境。
步骤
1.创建一个DataAbility和数据库常量类
a.创建一个Empty DataAbility
entity右键,New- Ability-Empty Data Ability,然后输入名称 NoteDataAbility
b.创建一个数据库常量类 Const.java
存放数据库名称、表名称、字段列名称、存储路径等
需要注意的是,
BASE_URI 3个杠后面的部分要和config.json Data Ability 声明的uri完全一致,否则应用无法启动
c.config.json相关配置
config.json涉及NoteDataAbility.java 的地方有3处,
第1处在module对象下,
第2处是abilities对象下,
permissions表示其他应用的能力调用当前能力所需的权限。
默认情况下隐藏"visible"字段(值为false),表示仅本应用可访问该Data,开发人员可根据需求修改permissions、visible值、uri等内容。当外部应用需要访问/控制此数据库字段时,在该Data Ability配置中增加"visible": true,并在外面应用的配置文件config.json中申请permissions权限。
第3处是reqPermissions对象下,
说明:如果待访问的Data Ability是由本应用创建,则可以不声明该权限。
2.声明数据库存储对象和数据库配置
在NoteDataAbility.java 添加如下代码
3.实现打开RDB数据库回调函数
在NoteDataAbility.java 添加如下代码
4.初始化RDB数据库存储对象
在NoteDataAbility.java 添加如下代码
5.实现对数据库的基本操作函数
NoteDataAbility.java操作数据库的方法都需要自己实现,包括:添加、修改、查询、删除,还有打开文件,主要使用rdbStore对象。
6.数据的订阅和通知
在NoteDataAbility.java 中, 我们看到insert/update/delete方法都有一行
目的是在数据库数据发生变化时,通知数据的订阅者。
而在MainAbilitySlice.java 类中有如下方法,在OnStart()中被调用,实现了数据变化的订阅
同时,数据变化订阅方还需要实现IDataAbilityObserver接口,在数据变化时会自动回调,完成对应的逻辑处理。
当数据订阅者不再需要订阅Data变化时,则调用unregisterObserver(Uri uri, IDataAbilityObserver dataObserver)方法取消。
观察者模式的作用在于
当数据库表格的内容产生变化时,可以主动通知与该表格数据相关联的进程或者应用,从而使得相关进程或者应用接收到数据变化后完成相应的处理。
7.访问Data Ability,新建AddNoteAbility,在AddNoteAbilitySlice实现数据的添加和修改
开发者可以通过DataAbilityHelper类来访问当前应用或其他应用提供的共享数据。
DataAbilityHelper作为客户端,与提供方的Data进行通信。DataAbilityHelper提供了一系列与Data Ability通信的方法。
a.数据的添加
b.修改和删除数据
c.查询数据
实践中遇到的小知识点记录一下
1. 如何监听 TextField 文本变更事件
2. ListContainer 组件添加点击事件
在 Provider 中 getComponent添加,在初始化Provider时传递AbilitySlice对象过来
效果展示
完整代码
附件直接下载
感谢楼主分享,分享的十分全面。
直接插眼!嘿嘿
搞的真快,这部分我学的很不扎实……
感谢各位的支持!