HarmonyOS-记账本-本地持久化存储
通过sqlLite实现本地化存储,但是感觉操作好难
不过下面这个黑马程序员提供的工具类简化了很多
import common from '@ohos.app.ability.common'; import relationalStore from '@ohos.data.relationalStore'; import { ColumnInfo, ColumnType } from '../bean/ColumnInfo'; import Logger from './Logger'; const DB_FILENAME: string = 'HeiMaHealthy.db' class DbUtil { rdbStore: relationalStore.RdbStore initDB(context: common.UIAbilityContext): Promise<void> { let config: relationalStore.StoreConfig = { name: DB_FILENAME, securityLevel: relationalStore.SecurityLevel.S1 } return new Promise<void>((resolve, reject) => { relationalStore.getRdbStore(context, config) .then(rdbStore => { this.rdbStore = rdbStore Logger.debug('rdbStore 初始化完成!') resolve() }) .catch(reason => { Logger.debug('rdbStore 初始化异常', JSON.stringify(reason)) reject(reason) }) }) } createTable(createSQL: string): Promise<void> { return new Promise((resolve, reject) => { this.rdbStore.executeSql(createSQL) .then(() => { Logger.debug('创建表成功', createSQL) resolve() }) .catch(err => { Logger.error('创建表失败,' + err.message, JSON.stringify(err)) reject(err) }) }) } insert(tableName: string, obj: any, columns: ColumnInfo[]): Promise<number> { return new Promise((resolve, reject) => { // 1.构建新增数据 let value = this.buildValueBucket(obj, columns) // 2.新增 this.rdbStore.insert(tableName, value, (err, id) => { if (err) { Logger.error('新增失败!', JSON.stringify(err)) reject(err) } else { Logger.debug('新增成功!新增id:', id.toString()) resolve(id) } }) }) } delete(predicates: relationalStore.RdbPredicates): Promise<number> { return new Promise((resolve, reject) => { this.rdbStore.delete(predicates, (err, rows) => { if (err) { Logger.error('删除失败!', JSON.stringify(err)) reject(err) } else { Logger.debug('删除成功!删除行数:', rows.toString()) resolve(rows) } }) }) } queryForList<T>(predicates: relationalStore.RdbPredicates, columns: ColumnInfo[]): Promise<T[]> { return new Promise((resolve, reject) => { this.rdbStore.query(predicates, columns.map(info => info.columnName), (err, result) => { if (err) { Logger.error('查询失败!', JSON.stringify(err)) reject(err) } else { Logger.debug('查询成功!查询行数:', result.rowCount.toString()) resolve(this.parseResultSet(result, columns)) } }) }) } parseResultSet<T> (result: relationalStore.ResultSet, columns: ColumnInfo[]): T[] { // 1.声明最终返回的结果 let arr = [] // 2.判断是否有结果 if (result.rowCount <= 0) { return arr } // 3.处理结果 while (!result.isAtLastRow) { // 3.1.去下一行 result.goToNextRow() // 3.2.解析这行数据,转为对象 let obj = {} columns.forEach(info => { let val = null switch (info.type) { case ColumnType.LONG: val = result.getLong(result.getColumnIndex(info.columnName)) break case ColumnType.DOUBLE: val = result.getDouble(result.getColumnIndex(info.columnName)) break case ColumnType.STRING: val = result.getString(result.getColumnIndex(info.columnName)) break case ColumnType.BLOB: val = result.getBlob(result.getColumnIndex(info.columnName)) break } obj[info.name] = val }) // 3.3.将对象填入结果数组 arr.push(obj) Logger.debug('查询到数据:', JSON.stringify(obj)) } return arr } buildValueBucket(obj: any, columns: ColumnInfo[]): relationalStore.ValuesBucket { let value = {} columns.forEach(info => { let val = obj[info.name] if (typeof val !== 'undefined') { value[info.columnName] = val } }) return value } } let dbUtil: DbUtil = new DbUtil(); export default dbUtil as DbUtil

浙公网安备 33010602011771号