往期知识点整理
场景描述
关系型数据库(Relational Database,RDB)是一种基于关系模型来管理数据的数据库。关系型数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查等接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需要。
场景一:基于RDB已提供API的数据库基础使用
场景二:基于executeSql、querySql执行增删改查复杂SQL语句
场景三:事务的使用
场景四:批量插入数据的不同实现方式及性能对比
场景五:数据库备份与恢复
场景六:全文检索(FTS)使用思路
方案描述
场景一:基于RDB已提供API的数据库基础使用
方案
通过insert、update、delete、query接口及关系型数据库谓词predicates的数据库基础操作。 RdbPredicates :数据库中用来代表数据实体的性质、特征或者数据实体之间关系的词项,主要用来定义数据库的操作条件。常用的方法有equalTo,notEqualTo,or,and,isnull,between,orderby,groupby等。
核心代码
文中的操作主要基于如下的数据库,详细数据库使用步骤可参考: 关系型数据库使用指南 。
//创建数据库及相关表
export default class Rdb{
rdbStore?: relationalStore.RdbStore;
context:Context = getContext();
constructor(storeName: string)
{
// 数据库配置
const STORE_CONFIG:relationalStore.StoreConfig = {
name: storeName,
securityLevel: relationalStore.SecurityLevel.S1,
};
// 获取数据库Store
relationalStore.getRdbStore(this.context, STORE_CONFIG, (err: BusinessError, rdbStore: relationalStore.RdbStore) => {
this.rdbStore = rdbStore;
if (err) {
console.error(`Get RdbStore failed, code is ${err.code},message is ${err.message}`);
return;
}
console.info(`Get ${storeName} RdbStore successfully.`);
})
}
CreateTable()
{
//建表语句
const SQL_CREATE_TABLE = 'CREATE TABLE IF NOT EXISTS STUDENT (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,AGE INTEGER,SALARY REAL)';
if(this.rdbStore){
this.rdbStore.executeSql(SQL_CREATE_TABLE);
console.info(`CreateTable successfully.`);
}
}
}
通过ValuesBucket构建数据,insert接口插入。
InsertData(name:string,age:number,salary:number)
{
// 插入数据
const valueBucket: ValuesBucket = {
'NAME': name,
'AGE': age,
'SALARY': salary
};
if(this.rdbStore){
this.rdbStore.insert('STUDENT', valueBucket, (err, rowId) => {
if (err) {
console.error(`Failed to insert data. Code:${err.code}, message:${err.message}`);
return;
}
console.info(`Succeeded in inserting data. rowId:${rowId}`);
})
}
}
通过predicates构建删除条件,删除name为Lisa的数据,delete接口执行删除。
DeleteData()
{
let predicates = new relationalStore.RdbPredicates("STUDENT");
predicates.equalTo("NAME", "Lisa");