赞
踩
目录
2、RdbPredicates 用来定义数据库的操作条件,可用于查询,修改,删除的条件语句
(1)创建表 RdbStore.executeSql(sql: string, bindArgs?: Array):Promise
4、ResultSet 提供用户调用关系型数据库查询接口之后返回的结果集合,常用的方法如下
import relationalStore from '@ohos.data.relationalStore'
通过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')
- }
- }
- 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 的方法可以参考官网
- let createTableSql = `create table if not exists userInfo (
- id integer primary key autoincrement,
- name text,
- age integer
- )`
- this.mRdbStore.executeSql(createTableSql)
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是对应的值
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'的数据
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
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 对象中解析出结果
(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())
- })
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。