从API Version 9开始,鸿蒙开发中sqlite使用新接口@ohos.data.relationalStore
但是 relationalStore在 getRdbStore操作时,在预览模式运行或者远程模拟器运行都会报错,导致无法使用。查了一圈说只有在真机上可以正常使用,因此这里暂且使用 @ohos.data.rdb
二者的接口非常相似,会使用了ohos.data.rdb,自然也会使用ohos.data.relationalStore
在harmonyos开发中,操作数据库时,我们通常习惯将一个功能模块数据库操作全部写在一个ets文件中并export,在界面文件中直接导入使用。
1.数据库配置以及建表
新建userDb.ets文件并添加以下代码
import data_rdb from '@ohos.data.rdb'
const STORE_CONFIG = {name: "test.db"}
const TAB_USER = "user"
const CREATE_TABLE_CODE = "CREATE TABLE IF NOT EXISTS "+TAB_USER+" ("
+ "id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "name TEXT , "
+ "age TEXT , "
+ "sex TEXT ) "
export function createTable(context) {
data_rdb.getRdbStore(context,STORE_CONFIG, 1, function (err, rdbStore) {
rdbStore.executeSql(CREATE_TABLE_CODE)
console.info('create table done.')
})
}
在User.ets界面导入并调用
import {createTable} from '../utils/userDb'
aboutToAppear() {
createTable(getContext(this))
}
2.插入数据
userDb.ets文件添加 insertData方法,这里需要注意的是promise的用法,因为需要将执行结果返回界面,所以方法里面多次使用了Promise来返回结果
插入的字段要和数据库字段保持一致。
export function insertData(context,list):any{
const promise = data_rdb.getRdbStore(context,STORE_CONFIG, 1)
return promise.then(async (rdbStore) => {
let arr:any = [];
for(let i:number=0; i<list.length; i++){
const obj = list[i]
const item ={
name: obj.name,
age: obj.age,
sex: obj.sex
}
rdbStore.insert(TAB_USER, item);
}
console.log('--start')
console.log('完了')
return true;
})
}
在User.ets界面导入并调用
import {insertData} from '../utils/userDb'
addData(){
let array = [];
for(let i=0; i<20; i++){
array.push({
name:'张飞'+i,
age: 20+i,
sex: '男'
})
}
insertData(getContext(this), array)
.then(res=>{
if(res){
this.loading = false
this.showDialog('添加成功')
this.search(true)
}
})
}
3.查询
userDb.ets文件添加 queryDataPage方法,这里用了分页查询的方式,还有一种谓词的查询方式请参考官方文档。
export function queryDataPage(context,param):any {
let promise = data_rdb.getRdbStore(context, STORE_CONFIG, 1)
return promise.then(async (rdbStore) => {
const sql: string = "select * from "+TAB_USER+" where name like ? " +
"order by id asc limit ? OFFSET ? ";
console.log('----sql---', sql)
const pS = param.pageSize
const page = param.page
console.log('param.code', param.code)
console.log('pS', pS)
c