如下代码是一个工具类,可以自己导入到自己项目中,在入口文件中初始化即可使用,使用示例放在下节中
import relationalStore from '@ohos.data.relationalStore'
import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
import { ValuesBucket, ValueType } from '@ohos.data.ValuesBucket';
const TAG: string = '[RDBUtil]'
class RDBUtil {
private context: common.UIAbilityContext | undefined = undefined
// 存储已创建的RdbStore
private rdbMap = new Map<string,relationalStore.RdbStore>()
private currentRDB: string = 'default'
init(context: common.UIAbilityContext) {
this.context = context
}
/**
* 创建数据库/获取连接
* @param rdbName
* @param config
* @returns
*/
async createRDB(rdbName: string, config ?: relationalStore.StoreConfig): Promise<relationalStore.RdbStore> {
let promise: Promise<relationalStore.RdbStore> = new Promise(async (resolve, reject) => {
if (!this.context) {
console.error(TAG, ' (init) ERROR => Context 未获取')
reject(TAG + ' (init) ERROR => Context 未获取')
}
this.currentRDB = rdbName
const STORE_CONFIG: relationalStore.StoreConfig = config ? config : {name: rdbName, securityLevel: 1}
try {
let rdb = this.rdbMap.get(rdbName)
if (!rdb) {
rdb = await relationalStore.getRdbStore(this.context, STORE_CONFIG)
this.rdbMap.set(rdbName, rdb)
}
console.info(TAG, ` (createRDB) SUCCESS TO CREATE: ${rdbName} => 创建连接成功`)
resolve(rdb)
} catch (err) {
let code = (err as BusinessError).code
let message = (err as BusinessError).message
console.error(TAG, ` (createRDB) FAIL TO CREATE: ${rdbName} => code: ${code}, message: ${message}`)
reject(err as BusinessError)
}
})
return promise
}
/**
* 获取/切换 RDB数据库
* @param rdbName
* @returns RdbStore
*/
async getConnection(rdbName: string): Promise<relationalStore.RdbStore> {
try {
this.currentRDB = rdbName
let rdb = this.rdbMap.get(rdbName)
if (!rdb) {
console.error(TAG, ` (getConnection) FAIL TO GET => ${this.currentRDB} RDB连接不存在 重新创建`)
rdb = await this.createRDB(rdbName)
}
console.info(TAG, ` (getConnection) SUCCESS TO GET => ${this.currentRDB} RDB连接获取成功`)
return Promise.resolve(rdb)
} catch (err) {
let code = (err as BusinessError).code
let message = (err as BusinessError).message
console.error(TAG, ` (getConnection) FAIL TO GET: ${this.currentRDB} => code: ${code}, message: ${message}