鸿蒙Next中如何读取document中的数据库

在鸿蒙Next系统中,如何读取document目录下的数据库文件?我尝试使用DatabaseHelper,但一直无法正确访问路径。请问具体的实现步骤是什么?是否需要特殊权限或者其他配置?

2 回复

在鸿蒙Next中,读取document数据库?简单!用DatabaseHelper类,配合query()方法,记得先获取DataAbilityHelper实例。代码大概长这样:

DataAbilityHelper helper = DataAbilityHelper.creat...;
ResultSet result = helper.query(uri, columns, ...);

别忘了处理权限和异常,不然程序会“罢工”抗议哦!😄

更多关于鸿蒙Next中如何读取document中的数据库的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,读取应用沙箱内document目录下的数据库,可以通过关系型数据库(RDB)或对象关系映射(ORM)库实现。以下是使用RDB API的步骤和示例代码:

步骤说明:

  1. 获取数据库路径:使用Context获取应用document目录路径,并指定数据库文件名。
  2. 配置数据库:通过RdbStoreConfig设置数据库属性。
  3. 打开数据库:使用RdbHelper.getRdbStore()获取数据库实例。
  4. 执行查询操作:通过SQL语句读取数据。

示例代码:

import relationalStore from '@ohos.data.relationalStore';
import common from '@ohos.app.ability.common';

// 1. 定义数据库表结构
const SQL_CREATE_TABLE = `
  CREATE TABLE IF NOT EXISTS user (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER
  )`;

// 2. 配置数据库
const config: relationalStore.RdbStoreConfig = {
  name: 'test.db', // 数据库文件名
  securityLevel: relationalStore.SecurityLevel.S1 // 安全级别
};

// 3. 获取RdbStore实例
let rdbStore: relationalStore.RdbStore | undefined = undefined;

// 在Ability或UIAbility的onCreate中初始化
async function initDatabase(context: common.Context) {
  try {
    // 获取document目录路径
    let path = context.filesDir + '/test.db';
    
    rdbStore = await relationalStore.getRdbStore(context, config);
    console.info('Database created successfully.');
    
    // 建表
    await rdbStore.executeSql(SQL_CREATE_TABLE);
    console.info('Table created successfully.');
  } catch (err) {
    console.error(`Failed to init database. Code:${err.code}, message:${err.message}`);
  }
}

// 4. 查询数据示例
async function queryUsers() {
  if (!rdbStore) {
    console.error('RdbStore is not initialized.');
    return;
  }

  try {
    const predicates = new relationalStore.RdbPredicates('user'); // 表名
    const resultSet = await rdbStore.query(predicates, ['id', 'name', 'age']);
    
    // 遍历结果
    while (resultSet.goToNextRow()) {
      const id = resultSet.getLong(resultSet.getColumnIndex('id'));
      const name = resultSet.getString(resultSet.getColumnIndex('name'));
      const age = resultSet.getLong(resultSet.getColumnIndex('age'));
      console.info(`id: ${id}, name: ${name}, age: ${age}`);
    }
    
    resultSet.close(); // 关闭结果集
  } catch (err) {
    console.error(`Query failed. Code:${err.code}, message:${err.message}`);
  }
}

关键点:

  • 路径管理:数据库文件默认存储在应用沙箱内,无需额外权限。
  • 异步操作:所有数据库方法均为异步(返回Promise),需使用await
  • 错误处理:务必通过try-catch捕获数据库操作异常。

注意事项:

  • 确保在UIAbility的onCreate或页面初始化时完成数据库初始化。
  • 实际开发中可将数据库操作封装为单例管理类。

如需使用更高级的ORM功能,可参考@ohos.data.orm库。

回到顶部