当前位置:   article > 正文

鸿蒙-关系型数据库(@ohos.data.relationalStore)_鸿蒙数据库

鸿蒙数据库

目录

一、导入模块

二、常用功能

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表示安全等级

  1. let config = {
  2. name: dbName,
  3. securityLevel: relationalStore.SecurityLevel.S1
  4. }

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

  1. import relationalStore from '@ohos.data.relationalStore'
  2. import common from '@ohos.app.ability.common';
  3. class DbUtils {
  4. private dbMap = new Map<string,relationalStore.RdbStore>()
  5. createDb(context:common.UIAbilityContext, dbName:string):Promise<relationalStore.RdbStore> {
  6. return new Promise<relationalStore.RdbStore>((success, error) => {
  7. if (!context || !dbName) {
  8. return
  9. }
  10. let config = {
  11. name: dbName,
  12. securityLevel: relationalStore.SecurityLevel.S1
  13. }
  14. let rdbStore = this.dbMap.get(dbName)
  15. if (!rdbStore) {
  16. relationalStore.getRdbStore(context, config).then(rdbStore => {
  17. this.dbMap.set(dbName, rdbStore)
  18. success(rdbStore)
  19. }).catch(err => {
  20. error(err)
  21. })
  22. } else {
  23. success(rdbStore)
  24. }
  25. })
  26. }
  27. }

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

  1. import DbUtils from '../database/DbUtils'
  2. export default class EntryAbility extends UIAbility {
  3. onCreate(want, launchParam) {
  4. DbUtils.createDb(this.context, 'myApp.db')
  5. }
  6. }

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

  1. import dataRdb from '@ohos.data.relationalStore'
  2. let predicates = new dataRdb.RdbPredicates('dayInfo');
  3. predicates.equalTo('date', '2023-06-06')
  4. .and()
  5. .equalTo('name', 'zzz')

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

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

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

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

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

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

  1. insert() {
  2. let values = [
  3. {
  4. name: 'lisi',
  5. age: 11
  6. },
  7. {
  8. name: 'zhangsan',
  9. age: 13
  10. },
  11. {
  12. name: 'wangwu',
  13. age: 16
  14. }
  15. ]
  16. this.mRdbStore.batchInsert('userInfo', values)
  17. }

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

(3)删除数据

delete(predicates: RdbPredicates): Promise<number>

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

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

(4)修改数据

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

  1. update() {
  2. let bucket = {
  3. age: 66
  4. }
  5. let predicates = new relationalStore.RdbPredicates('userInfo')
  6. predicates.equalTo('name', 'lisi')
  7. this.mRdbStore.update(bucket, predicates)
  8. }

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

(5)查询数据

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

  1. query() {
  2. let predicates = new relationalStore.RdbPredicates('userInfo');
  3. predicates.equalTo('name', 'lisi');
  4. this.mRdbStore.query(predicates).then(resultSet => {
  5. if(resultSet.rowCount === 0) {
  6. return
  7. }
  8. resultSet.goToFirstRow()
  9. do {
  10. let name = resultSet.getString(resultSet.getColumnIndex('name'))
  11. let age = resultSet.getLong(resultSet.getColumnIndex('age'))
  12. hilog.info(0xF0000, 'dbTest', '%{public}s', `userInfo name is ${name},age is ${age}`)
  13. } while (resultSet.goToNextRow())
  14. })
  15. }

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值

处理查询结果代码示例:

  1. this.mRdbStore.query(predicates).then(resultSet => {
  2. if(resultSet.rowCount === 0) {
  3. return
  4. }
  5. resultSet.goToFirstRow()
  6. do {
  7. let name = resultSet.getString(resultSet.getColumnIndex('name'))
  8. let age = resultSet.getLong(resultSet.getColumnIndex('age'))
  9. hilog.info(0xF0000, 'dbTest', '%{public}s', `userInfo name is ${name},age is ${age}`)
  10. } while (resultSet.goToNextRow())
  11. })

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/236834
推荐阅读
相关标签
  

闽ICP备14008679号