数据持久化-关系型数据库

基于SQLite组件提供的本地数据库,用于管理应用中的结构化数据

用户首选项只能在轻量级数据中进行数据持久化,复杂的数据就需要用到关系型数据库

三步使用:1.初始化数据库 2.增删改数据 3.查询数据

1.初始化数据库

1)导入关系型数据库模块

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

2)  初始化数据库表

复制代码
//rdb配置
const config = {
  name: 'MyApplication.db',//数据库文件名
  securityLevel: relationalSore.SecurityLevel.S1 //数据库安全级别
}
//初始化表的SQL
const sql = 'CREATE TABLE IF NOT EXISTS TASK (
                  ID INTEGER PRIMARY KEY,
                  NAME TEXT NOT NULL,
                  FINISHED bit
                  ) '    
//获取rdb
relationalStore.getRbdStore(this.context, config,(err, rdbStore) => {
  //执行SQL,后续的所有增删改查都是使用rdbStore对象
  rdbStore.executeSql(sql)
})
可以把rdb抽取为成员变量供下面重复使用
private rdbStore:relationalStore.RdbStore
保存rdbStore
this.rdbStore = rdbStore
复制代码

 2.增删改数据

1)新增数据

//准备数据
let task = {id: 1, name:'任务1',finished:false};
//新增
this.rdbStore.insert(this.tableName,  task)

2)修改数据

//要更新的数据
let task = {'finished' : true};
//查询条件,RdbPredicates就是条件谓词
let predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo('ID', id)
//执行更新
this.rdbStore.update(task,predicates)

3)删除数据

//查询条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo('ID', id)
//执行删除
this.rdbStore.delete(predicates)

3.查询数据

1)查询数据

//查询条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
//执行查询
let result = await this.rdbStore.query(predicates,['ID','NAME','FINISHED'])

查询是异步的,需要await等待,返回的是promise类型的result结果集,需要进行解析

2)解析结果

复制代码
//准备数组保存结果
let tasks: any[] = []
//循环遍历结果集,判断是否结果遍历到最后一行
while(!result.isAtlastRow){
  //指针移动到下一行数据
  result.goToNextRow()
  //根据字段名获取字段index,从而获取字段值
  let id = result.getLong(result.getColumnIndex('ID'));
  let name = result.getString(result.getColumnIndex('NAME'));
  tasks.push({id,name,finished: !!finished})
}
拿到的finished结果需要转化为布尔类型所以要用!!finished来转化
假如finished=0, !finished=!0=1=true,!!finished=!true=false,这样就把0转化为false了
复制代码

 

posted @   狠认真的人  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示