封装一个数据库的方法用来使用
封装一个类,写好对应的增删改查,使用我们封装好的数据库方法,操作我们本地鸿蒙自带的数据库
示例代码(包含详细讲解):
import { relationalStore, ValuesBucket } from '@kit.ArkData'
export interface InterviewAudioItem extends ValuesBucket {
id: number | null
name: string
size: number
}
class AudioDB {
store?: relationalStore.RdbStore
tableName = '表的名字'
// 初始化数据库
async initStore() {
const ctx = AppStorage.get<Context>('context')
if (ctx) {
const store = await relationalStore.getRdbStore(ctx, {
name: '表的名字',
securityLevel: relationalStore.SecurityLevel.S1
})
const sql = `
CREATE TABLE IF NOT EXISTS ${this.tableName} (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
size INTEGER NOT NULL,
)
`
await store.executeSql(sql)
this.store = store
}
}
// 添加
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()
}
}
// 删除
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()
}
}
// 修改
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()
}
}
// 查询用户
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')),
name: resultSet.getString(resultSet.getColumnIndex('name')),
size: resultSet.getLong(resultSet.getColumnIndex('size')),
})
}
resultSet.close()
return Promise.resolve(list)
}
}
export const audioDB = new AudioDB()