约束限制
系统默认日志方式是WAL(Write Ahead Log)模式,系统默认落盘方式是FULL模式。
数据库中连接池的最大数量是4个,用以管理用户的读操作。
为保证数据的准确性,数据库同一时间只能支持一个写操作。
当应用被卸载完成后,设备上的相关数据库文件及临时文件会被自动清除。
示例:
1.定义视图数据模型
@Observed
export default class TaskInfo {
id:number
name:string
finished:boolean
constructor(id:number ,name:string) {
this.id = id
this.name = name
this.finished = false
}
}
2.定义数据操作模型
import relationalStore from '@ohos.data.relationalStore';
import TaskInfo from '../viewmodel/TaskInfo'
import { Context } from '@kit.AbilityKit';
class TaskModel {
private rdbStore : relationalStore.RdbStore
private tableName = "TASK"
/**
* 初始化任务表
* 项目刚启动
*/
initTaskDB(context:Context){
//1.rdb 配置
const config: relationalStore.StoreConfig = {
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)'; // 建表Sql语句
//3.获取rdb
relationalStore.getRdbStore(context ,config, (err,rdbStore)=>{
if (err) {
console.log('testTag',`创建rdbStore失败. Code:${err.code}, message:${err.message}`);
return;
}
console.log('testTag',`创建task表成功!`);
rdbStore.executeSql(sql); // 创建数据表
this.rdbStore = rdbStore
})
}
/**
* 查询任务列表
*/
async getTaskList(){
//1.构建查询条件
let predicates = new relationalStore.RdbPredicates(this.tableName) //table name
//2.查询
let result = await this.rdbStore.query(predicates, ['ID', 'NAME', 'FINISHED'])
//3.解析查询结果
//3.1定义一个数组,
let tasks :TaskInfo[] = []
//3.2.遍历+封装
while (!result.isAtLastRow){
//3.3指针移到下一行
result.goToNextRow()
//3.4获取数据
let id = result.getLong(result.getColumnIndex("ID"))
let name = result.getString(result.getColumnIndex("NAME"))
let finished = result.getLong(result.getColumnIndex("FINISHED"))
//3.5封装到数组
tasks.push({ id, name, finished: !!finished})
}
console.log('testTag',`查询到数据:` ,JSON.stringify(tasks));
return tasks
}
/**
* 添加一个新的任务
* @param name
*/
addTask(name:string):Promise<number> {
return this.rdbStore.insert(this.tableName , {name ,finished:false})
}
/**
* 添加一个新的任务
* @param id
* @param finish
*/
updateTaskStatus(id:number ,finish:boolean):Promise<number>{
//要更新的数据
const valueBucket :relationalStore.ValuesBucket = {
'FINISHED': finish
};
//更新的条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo("ID",id)
//更新造作
return this.rdbStore.update(valueBucket ,predicates)
}
/**
* 根据id 删除任务id
* @param id
*/
deleteTaskById(id:number ){
//删除的条件
let predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo("ID",id)
//删除
return this.rdbStore.delete(predicates)
}
}
let taskModel = new TaskModel()
export default taskModel as TaskModel ;