鸿蒙-关系型数据库(@ohos.data.relationalStore)
update函数需要传入两个参数,第一个是需要更新的列值,是一个对象,key为列名,value是对应的值,第二个参数是一个条件对象,上面代码表示更新userInfo表中name='lisi'的age更新为66。batchInsert函数第一个参数是表名称,第二个参数是一个ValuesBucket数组对象,ValuesBucket表示key-value的对象,key表示表的列名称,value是对应的
目录
2、RdbPredicates 用来定义数据库的操作条件,可用于查询,修改,删除的条件语句
(1)创建表 RdbStore.executeSql(sql: string, bindArgs?: Array):Promise
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())
})
更多推荐
所有评论(0)