基于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了