概述

当我们想要在鸿蒙开发中遇到关系型数据库时,我们可以按下述方式来使用

环境描述

开发环境:Windows 10

DevEco Studio 版本:DevEco Studio 5.0.0 Release(5.0.3.910)

SDK 版本:5.0.0.70(Full SDK)

设备型号:黄鹂

系统版本:OpenHarmony 5.0.0.710  

步骤

1、创建数据库,我们在创建数据库时,需要自己插入sql语句,例如:

async createData(context: Context) {
  console.info(`index Create !`);
  const CONFIG: relationalStore.StoreConfig = {
    name: "Store.db",
    securityLevel: relationalStore.SecurityLevel.S1,
  };

  // 默认数据库文件路径为 context.databaseDir + rdb + StoreConfig.name
  let store: relationalStore.RdbStore = await relationalStore.getRdbStore(context, CONFIG);
  console.info(`index Create Store.db successfully!`);

  // 创建表
  const CREATE_TABLE_SQL = "CREATE TABLE IF NOT EXISTS test (" +
    "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
    "name TEXT NOT NULL, " +
    "age INTEGER, " +
    "salary REAL, " +
    "blobType BLOB)";
  await store.executeSql(CREATE_TABLE_SQL);
  console.info(`index Create table test successfully!`);
}

在使用时可以用以下方式:

  let context = getContext(this);

await this.createData(context)

2.插入数据

async insertData(context: Context, valueBucketArray: Array<relationalStore.ValuesBucket>) {
  const CONFIG: relationalStore.StoreConfig = {
    name: "Store.db",
    securityLevel: relationalStore.SecurityLevel.S1,
  };

  // 默认数据库文件路径为 context.databaseDir + rdb + StoreConfig.name
  let store: relationalStore.RdbStore = await relationalStore.getRdbStore(context, CONFIG);
  console.info(`index insert Store.db successfully!`);

  // 数据插入
  await store.batchInsert("test", valueBucketArray as Object as Array<relationalStore.ValuesBucket>);
}

在使用时,我们需要先准备数据,再执行插入数据的操作:

// 数据准备
const count = 5
let valueBucketArray = new Array<relationalStore.ValuesBucket>(count);
for (let i = 0; i < count; i++) {
  let v : relationalStore.ValuesBucket = {
    id: i,
    name: "zhangsan" + i,
    age: 20,
    salary: 5000 + 50 * i
  };
  valueBucketArray[i] = v;
}
console.log('index insert start')
await this.insertData(context, valueBucketArray)

3.查询数据

async queryData(context: Context): Promise<Array<relationalStore.ValuesBucket>> {
  const CONFIG: relationalStore.StoreConfig = {
    name: "Store.db",
    securityLevel: relationalStore.SecurityLevel.S1,
  };

  // 默认数据库文件路径为 context.databaseDir + rdb + StoreConfig.name
  let store: relationalStore.RdbStore = await relationalStore.getRdbStore(context, CONFIG);
  console.info(`index query Store.db successfully!`);

  // 获取结果集
  let predicates: relationalStore.RdbPredicates = new relationalStore.RdbPredicates("test");
  let resultSet = await store.query(predicates);  // 查询所有数据
  console.info(`index Query data successfully! row count:${resultSet.rowCount}`);
  let index = 0;
  let result = new Array<relationalStore.ValuesBucket>(resultSet.rowCount)
  resultSet.goToFirstRow()
  do {
    result[index++] = resultSet.getRow()
  } while (resultSet.goToNextRow());
  resultSet.close();
  return result
}

我们可以遍历数据以便查看:

let index = 0
console.log('index query start')
let ret = await this.queryData(context) as Array<relationalStore.ValuesBucket>
for (let v of ret) {
  console.info(`index Row[${index}].id = ${v.id}`)
  console.info(`index Row[${index}].name = ${v.name}`)
  console.info(`index Row[${index}].age = ${v.age}`)
  console.info(`index Row[${index}].salary = ${v.salary}`)
  index++
}

4.删除数据库

async clearData(context: Context) {
  const CONFIG: relationalStore.StoreConfig = {
    name: "Store.db",
    securityLevel: relationalStore.SecurityLevel.S1,
  };

  // 默认数据库文件路径为 context.databaseDir + rdb + StoreConfig.name
  await relationalStore.deleteRdbStore(context, CONFIG);
  console.info(`index Delete Store.db successfully!`);
}

使用方法就比较简单了,直接删除就可以了

await this.clearData(context)

如上 我们就可以开启我们的关系型数据库的使用之旅了

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐