关系型数据库(Relational Database,RDB)是一种基于关系模型来管理数据的数据库。关系型数据库基于SQLite组件提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查等接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需要。不支持Worker线程。
关系型数据库相关的常用功能:
- RdbStore:提供管理关系数据库(RDB)方法的接口。
- RdbPredicates:数据库中用来代表数据实体的性质、特征或者数据实体之间关系的词项,主要用来定义数据库的操作条件。
- ResultSet:提供用户调用关系型数据库查询接口之后返回的结果集合。
1.创建数据库
CREATE TABLE IF NOT EXISTS interview_audio (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id TEXT NOT NULL,
name TEXT NOT NULL,
path TEXT NOT NULL,
duration INTEGER NOT NULL,
size INTEGER NOT NULL
)
2.封装一个类
import { relationalStore } from '@kit.ArkData'
class AudioDB {
store?: relationalStore.RdbStore
tableName = 'interview_audio'
// 初始化数据库
async initStore() {
const ctx = AppStorage.get<Context>('context')
if (ctx) {
const store = await relationalStore.getRdbStore(ctx, {
name: 'interview_audio.db',
securityLevel: relationalStore.SecurityLevel.S1
})
const sql = `
CREATE TABLE IF NOT EXISTS ${this.tableName} (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id TEXT NOT NULL,
name TEXT NOT NULL,
path TEXT NOT NULL,
duration INTEGER NOT NULL,
size INTEGER NOT NULL
)
`
await store.executeSql(sql)
this.store = store
}
}
}
3.数据操作方法
1)添加
// 添加
async insert(item: InterviewAudioItem) {
const rowId = await this.store?.insert(this.tableName, item)
if (rowId === undefined || rowId === -1) {
return Promise.reject('insert fail')
} else {
return Promise.resolve()
}
}
2)删除
// 删除
async delete(id: number) {
const predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo('id', id)
const rowCount = await this.store?.delete(predicates)
if (rowCount === undefined || rowCount <= 0) {
return Promise.reject('delete fail')
} else {
return Promise.resolve()
}
}
3)修改
async update(item: InterviewAudioItem) {
const predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo('id', item.id)
const rowCount = await this.store?.update(item, predicates)
if (rowCount === undefined || rowCount <= 0) {
return Promise.reject('update fail')
} else {
return Promise.resolve()
}
}
4)查询用户
async query(userId: string) {
const predicates = new relationalStore.RdbPredicates(this.tableName)
predicates.equalTo('user_id', userId)
const resultSet = await this.store?.query(predicates)
if (!resultSet) {
return Promise.reject('query fail')
}
const list: InterviewAudioItem[] = []
while (resultSet.goToNextRow()) {
list.push({
id: resultSet.getLong(resultSet.getColumnIndex('id')),
user_id: resultSet.getString(resultSet.getColumnIndex('user_id')),
name: resultSet.getString(resultSet.getColumnIndex('name')),
path: resultSet.getString(resultSet.getColumnIndex('path')),
duration: resultSet.getLong(resultSet.getColumnIndex('duration')),
size: resultSet.getLong(resultSet.getColumnIndex('size')),
create_time: resultSet.getLong(resultSet.getColumnIndex('create_time'))
})
}
resultSet.close()
return Promise.resolve(list)
}
}
4.导出类
export const audioDB = new AudioDB()
标签:关系,const,数据库,resultSet,predicates,NULL,id,store
From: https://blog.csdn.net/wo_hao_e/article/details/142182451