网站开发 只要,网站开发合同范本 doc,专业网页制作多少钱,如何学网站开发上文 HarmonyOS 数据持久化之首选项 preferences 我们有说用户首选项 但它只能处理一些比较简单的数据类型结构 的持久化处理 如果是一些批量较大 结构较为复杂的数据结构 那么 首选项就无法满足了 我们就要选择 关系型数据库
通过 SQLite 组件实现的一种本地数据库#xff0…上文 HarmonyOS 数据持久化之首选项 preferences 我们有说用户首选项 但它只能处理一些比较简单的数据类型结构 的持久化处理 如果是一些批量较大 结构较为复杂的数据结构 那么 首选项就无法满足了 我们就要选择 关系型数据库
通过 SQLite 组件实现的一种本地数据库具备所有关系型数据库特性 例如(事务 存储过程 视图)等等 因为是本地型数据库 所以不需要网络 性能也非常强大
因为 harmonyOS 关系型数据库 内容 比较复杂 我们分成三个部分
1 初始化数据库 2 对数据库进行 增删改 操作 3 查询操作
那么 我们就先来说 初始化数据库的内容
首先 这个东西 我们要封装起来 成一个类 在模块下的 ets目录 下 创建一个 utils 目录 下面创建一个 relationalClass.ts文件 然后 我们类基本骨架写成这样 //创建类对象 名称叫 relationalClass
class relationalClass{initTaskDB(context) {}}//new 一个relationalClass类的实力对象
const relational new relationalClass()
//将实力对象导出
export default relational as relationalClass然后 我们初始化的逻辑 就要写在 initTaskDB 中 因为初始化 需要UIAbility 中的 上下文 ConText 所以 这里 我们先接这个参数
首先 我们要导包
import relationalStore from ohos.data.relationalStore;这也是 harmonyos 内置的 不需要安装 直接导入就可以用
然后 是做一个 rdb配置
const config {name:MyApplication.db,securityLevel: relationalStore.SecurityLevel.S1
}这里 对象中 nameo 是我们数据库本地文件名 因为这个相当于是本地文件读写 然偶 securityLevel 字段就是 relationalStore.SecurityLevel 下的 S1 到 S4 值越大 安全级别越高 因为 这里 我们就是做个练习 所以 S1就够用了
键表的话 就用 sql 语句就好了 如果不懂sql 可以参考我的文章 MySQL新建表 演示单表增删查改
const sql CREATE TABLE IF NOT EXISTS TASK(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT NOT NULL,FINISHED bit)这里 语句发生了 一点点变化
CREATE TABLE IF NOT EXISTS 表名 这句是基本一样的 第一 字段 ID NTEGER 数字类型 PRIMARY KEY 设置组件唯一记录 不能重复 AUTOINCREMENT 数字属性自增 sql中是 AUTO_INCREMENT 这里 不要中间的横杠了
NAME 字段 这里字符串 变成了 TEXT 文本类型 NOT NULL 非空约束
FINISHED 字段
TASK 表 三个字段
有一些不太一样 但大体还是看得懂的
我们 整体代码 编写如下
//导入 relationalStore 首选项操作对象 这个包是harmonyos自带的 无需安装
import relationalStore from ohos.data.relationalStore;//创建类对象 名称叫 relationalClass
class relationalClass{//记录 rdbStore 操作数据库对象private rdbStore:relationalStore.RdbStoreinitTaskDB(context) {// 1.rdb配置const config {name:MyApplication.db,securityLevel: relationalStore.SecurityLevel.S1}// 2.初始化sql语句const sql CREATE TABLE IF NOT EXISTS TASK(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT NOT NULL,FINISHED bit// 获取 RDBrelationalStore.getRdbStore(context, config,(err, rdbStore) {if(err) {console.log(testTag, 获取rdbstore失败!);return}//执行创建表sqlrdbStore.executeSql(sql);console.log(testTag, 创建表sql执行完毕!);//记录 rdbStarethis.rdbStore rdbStore;})}}//new 一个relationalClass类的实力对象
const relational new relationalClass()
//将实力对象导出
export default relational as relationalClass我们定义了一个成员变量 rdbStore 用于接受 getRdbStore 返回的 rdbStore对象 因为你之后要操作数据库 是需要通过它执行的
然后 我们 initTaskDB中 上来声明了 config 和 sql 内容 这个我们上面讲过 relationalStore.getRdbStore 获取 rdbSore 需要两个参数 UIAbility上下文的 ConText 和 我们上面声明的config 这里 会返回两个参数 如果 err有内容 说明 获取失败了 我们直接输出日志 如果 没有 则 通过 rdbStore.executeSql 执行我们的sql 需要一个sql字符串做参数
成功后 记录 rdbStore
然后 这里 我们找到模块入口文件 导入 我们写的这个类 然后在onCreate 生命周期中 使用我们写的 initTaskDB 传入 我们 UIAbility 上下文的 ConText