目录

一、导入模块

二、常用功能

1、创建数据库实例

2、RdbPredicates 用来定义数据库的操作条件,可用于查询,修改,删除的条件语句

3、RdbStore 供了一系列的增、删、改、查等接口

(1)创建表 RdbStore.executeSql(sql: string, bindArgs?: Array):Promise

(2)新增数据,可以插入单条数据,也可以批量插入数据

(3)删除数据

(4)修改数据

(5)查询数据

4、ResultSet 提供用户调用关系型数据库查询接口之后返回的结果集合,常用的方法如下


一、导入模块

import relationalStore from '@ohos.data.relationalStore'

二、常用功能

1、创建数据库实例

通过relationalStore.getRdbStore创建数据库实例

getRdbStore(context: Context, config: StoreConfig): Promise<RdbStore>

其中入参context是应用的上下文,config表示与数据库相关的配置一般配置如下,name表示数据库名称,securityLevel表示安全等级

let config = {
        name: dbName,
        securityLevel: relationalStore.SecurityLevel.S1
      }

 创建数据库代码如下,createDb方法接收两个参数,一个是context上下文,另一个dbName表示数据库名称

import relationalStore from '@ohos.data.relationalStore'
import common from '@ohos.app.ability.common';

class DbUtils {
  private dbMap = new Map<string,relationalStore.RdbStore>()
  createDb(context:common.UIAbilityContext, dbName:string):Promise<relationalStore.RdbStore> {
    return new Promise<relationalStore.RdbStore>((success, error) => {
      if (!context || !dbName) {
        return
      }
      let config = {
        name: dbName,
        securityLevel: relationalStore.SecurityLevel.S1
      }
      let rdbStore = this.dbMap.get(dbName)
      if (!rdbStore) {
        relationalStore.getRdbStore(context, config).then(rdbStore => {
          this.dbMap.set(dbName, rdbStore)
          success(rdbStore)
        }).catch(err => {
          error(err)
        })
      } else {
        success(rdbStore)
      }
    })
  }
}

 在应用入口类EntryAbility的onCreate方法中调用createDb方法来初始化数据库

import DbUtils from '../database/DbUtils'

export default class EntryAbility extends UIAbility {
  onCreate(want, launchParam) {
    DbUtils.createDb(this.context, 'myApp.db')
  }
}

2、RdbPredicates 用来定义数据库的操作条件,可用于查询,修改,删除的条件语句

import dataRdb from '@ohos.data.relationalStore'

let predicates = new dataRdb.RdbPredicates('dayInfo');
    predicates.equalTo('date', '2023-06-06')
              .and()
              .equalTo('name', 'zzz')

 如上构造的条件就是"date = '2023-06-06 And name = 'zzz''",操作的表为'dayInfo',更多RdbPredicates 的方法可以参考官网

3、RdbStore 供了一系列的增、删、改、查等接口

(1)创建表 RdbStore.executeSql(sql: string, bindArgs?: Array<ValueType>):Promise<void>

let createTableSql = `create table if not exists userInfo (
                            id integer primary key autoincrement,
                            name text,
                            age integer
                          )`
    this.mRdbStore.executeSql(createTableSql)

(2)新增数据,可以插入单条数据,也可以批量插入数据

insert(table: string, values: ValuesBucket): Promise<number>
batchInsert(table: string, values: Array<ValuesBucket>): Promise<number>

insert() {
    let values = [
      {
        name: 'lisi',
        age: 11
      },
      {
        name: 'zhangsan',
        age: 13
      },
      {
        name: 'wangwu',
        age: 16
      }
    ]
    this.mRdbStore.batchInsert('userInfo', values)
}

 batchInsert函数第一个参数是表名称,第二个参数是一个ValuesBucket数组对象,ValuesBucket表示key-value的对象,key表示表的列名称,value是对应的值

(3)删除数据

delete(predicates: RdbPredicates): Promise<number>

delete() {
    let predicates = new relationalStore.RdbPredicates('userInfo')
    predicates.equalTo('name', 'lisi')
    this.mRdbStore.delete(predicates).then(number => {
      hilog.info(0xF0000, 'dbTest', '%{public}s', `delete success ${number}`)
    })
  }

 delete函数入参就一个RdbPredicates对象,上面代码表示删除name='lisi'的数据

(4)修改数据

update(values: ValuesBucket, predicates: RdbPredicates): Promise<number>

update() {
    let bucket = {
      age: 66
    }
    let predicates = new relationalStore.RdbPredicates('userInfo')
    predicates.equalTo('name', 'lisi')
    this.mRdbStore.update(bucket, predicates)
  }

 update函数需要传入两个参数,第一个是需要更新的列值,是一个对象,key为列名,value是对应的值,第二个参数是一个条件对象,上面代码表示更新userInfo表中name='lisi'的age更新为66

(5)查询数据

query(predicates: RdbPredicates, columns?: Array<string>): Promise<ResultSet>

query() {
    let predicates = new relationalStore.RdbPredicates('userInfo');
    predicates.equalTo('name', 'lisi');
    this.mRdbStore.query(predicates).then(resultSet => {
      if(resultSet.rowCount === 0) {
          return
      }
      resultSet.goToFirstRow()
      do {
        let name = resultSet.getString(resultSet.getColumnIndex('name'))
        let age = resultSet.getLong(resultSet.getColumnIndex('age'))
        hilog.info(0xF0000, 'dbTest', '%{public}s', `userInfo name is ${name},age is ${age}`)
      } while (resultSet.goToNextRow())
    })

  }

query函数有两个参数,第一个是条件对象RdbPredicates,第二个是字符串数组,表示查询哪些列,返回结果是一个ResultSet 对象,可以从ResultSet 对象中解析出结果

4、ResultSet 提供用户调用关系型数据库查询接口之后返回的结果集合,常用的方法如下

(1)ResultSet.rowCount,获取结果集中的数量

(2)goToFirstRow,将游标置为第一行

(3)getColumnIndex(columnName: string): number,获取列的索引

(4)getString(columnIndex: number): string,获取对应列的string值

(5)getLong(columnIndex: number): number,获取对应列的number值

处理查询结果代码示例:

this.mRdbStore.query(predicates).then(resultSet => {
      if(resultSet.rowCount === 0) {
          return
      }
      resultSet.goToFirstRow()
      do {
        let name = resultSet.getString(resultSet.getColumnIndex('name'))
        let age = resultSet.getLong(resultSet.getColumnIndex('age'))
        hilog.info(0xF0000, 'dbTest', '%{public}s', `userInfo name is ${name},age is ${age}`)
      } while (resultSet.goToNextRow())
    })

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐