HarmonyOS 鸿蒙Next中获取外部SQLite数据库数据

HarmonyOS 鸿蒙Next中获取外部SQLite数据库数据 从安卓拿过来的SQLite数据库文件放在rawfile目录下,推到沙箱后发现数据库是空的,跟数据库中表的数据加密有关吗?

3 回复

应该是没有关系的,可以试试下面代码:

import { fileIo } from '@kit.CoreFileKit'

async function copyToSandbox() {
  const rawPath = 'test.db'
  const path = this.context.filesDir + '/' + 'test.db'
  const buf = await this.context.resourceManager.getRawFileContent(rawPath)
  const outFile = await fileIo.open(path, fileIo.OpenMode.CREATE | fileIo.OpenMode.WRITE_ONLY | fileIo.OpenMode.TRUNC)
  await fileIo.write(outFile.fd, buf.buffer)
  await fileIo.close(outFile.fd)
}

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


在鸿蒙Next中获取外部SQLite数据库数据,需使用DataAbilityHelper访问DataAbility。首先配置DataAbility的uri路径,然后通过DataAbilityHelperquery()方法执行查询操作。示例代码:

import dataAbility from '@ohos.data.dataAbility';
let helper = dataAbility.createDataAbilityHelper(context);
let uri = "dataability:///com.example.myapp.DataAbility/db/tablename";
let columns = ["column1", "column2"];
helper.query(uri, columns, null).then((data) => {
  // 处理查询结果
});

需提前在config.json中声明DataAbility权限。数据操作需在DataAbility子类中实现。

在HarmonyOS Next中,将SQLite数据库文件放在rawfile目录下后出现空数据的问题,通常与以下几个因素有关:

  1. 文件路径问题:rawfile目录下的文件在打包后会改变路径结构,需要通过ResourceManager获取正确路径。建议使用类似以下代码获取数据库路径:
ResourceManager resManager = getResourceManager();
RawFileEntry rawFileEntry = resManager.getRawFileEntry("resources/rawfile/yourdb.db");
String dbPath = rawFileEntry.openRawFileDescriptor().getFileDescriptor().getPath();
  1. 数据库加密问题:如果原安卓数据库使用了SQLCipher等加密方式,在HarmonyOS中需要相同解密方式才能访问。HarmonyOS Next原生SQLite不支持加密数据库直接读取。

  2. 文件权限问题:确保数据库文件已正确推送到设备沙箱环境,可通过HiLog打印文件是否存在及大小验证。

  3. 数据库版本兼容性:检查SQLite数据库版本是否与HarmonyOS内置SQLite版本兼容。

建议先确认数据库文件是否完整传输,再检查是否使用了加密。如果是加密数据库,需要先将数据解密导出为普通SQLite格式再使用。

回到顶部