HarmonyOS 鸿蒙Next 如何将.db文件打开获得一个database对象

发布于 1周前 作者 yibo5220 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何将.db文件打开获得一个database对象

我有一个db数据库文件,现在将它放到rawfile内,我引入了ohos/dataorm(V2.2.2)库,但在库中没有找到将db文件打开的相关方法

2 回复
目前并不支持直接在rawfile目录下去进行读写数据库,数据库文件必须放在沙箱路径的/data/app/el2/100/database/<bundleName>/entry/rdb/下或其子目录下。
数据库,请参考https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-data-relationalstore-0000001493744128-V5

参考代码:
将rawfile目录下db文件拷贝至数据库存储沙箱路径
saveFileToCache(file:resourceManager.RawFileDescriptor, dbName:string) {
  // 创建缓存文件(当前是覆盖式创建)
  let cFile = getContext(this).getApplicationContext().databaseDir + "/entry/rdb/" + dbName
  let cacheFile = fs.openSync(cFile, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)

// 读取缓冲区大小 let bufferSize = 30000 let buffer = new ArrayBuffer(bufferSize); //创建buffer缓冲区

// 要copy的文件的offset和length let currentOffset = file.offset; let lengthNeedToReed = file.length;

let readOption:ReadOptions = { offset: currentOffset, //期望读取文件的位置。可选,默认从当前位置开始读 length: bufferSize //每次期望读取数据的长度。可选,默认缓冲区长度 }

// 后面len会一直减,直到没有 while(true) { // 读取buffer容量的内容 let readLength = fs.readSync(file.fd, buffer, readOption); // 写入buffer容量的内容 fs.writeSync(cacheFile.fd, buffer, {length:readLength}) //写到cacheFile里 // 判断后续内容 修改读文件的参数 // buffer没读满代表文件读完了 if (readLength < bufferSize) { break; } if (readOption.offset != undefined){ readOption.offset += readLength; } } console.log(“Copy Success!!!”) fs.close(cacheFile); }

INIT() { // 创建数据库沙箱目录 try { let dirPath = getContext(this).getApplicationContext().databaseDir + “/entry” fs.mkdirSync(dirPath); dirPath = dirPath + “/rdb” fs.mkdirSync(dirPath); }catch (error) { console.error(mkdir rdbPath failed, error code: ${error.code}, message: ${error.message}.) };

//数据库名称 let dbName:string = ‘Company.db’

//读取rawfile目录下db文件 try { getContext(this).resourceManager.getRawFd(‘rdb/’ + dbName, (error, value) => { if (error != null) { console.log(callback getRawFd failed error code: ${error.code}, message: ${error.message}.); } else { console.info(value.length.toString()) this.saveFileToCache(value, dbName) } }); } catch (error) { console.error(callback getRawFd failed, error code: ${error.code}, message: ${error.message}.) }; }

参考fs文件管理:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-fs-V5

场景一代码开发步骤:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/data-persistence-by-rdb-store-0000001505752421-V5#section11675721527

更多关于HarmonyOS 鸿蒙Next 如何将.db文件打开获得一个database对象的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙Next系统中,若要将.db文件打开并获取一个数据库对象,你可以使用SQLite数据库框架。具体步骤如下:

  1. 引入SQLite库: 确保你的项目中已经包含了SQLite库。通常,HarmonyOS SDK已经内置了SQLite支持,无需额外添加。

  2. 定义数据库路径: 指定.db文件的存储路径,比如/data/user/0/你的包名/databases/目录下。

  3. 打开数据库: 使用SQLiteDatabase类打开数据库。如果文件存在,则打开它;如果不存在,则根据给定名称创建一个新的数据库。

    SQLiteDatabase db = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);
    

    其中dbPath是.db文件的完整路径。

  4. 获取数据库对象: 打开数据库后,db对象即为所需的数据库对象,你可以通过它执行SQL语句,进行增删改查等操作。

注意:以上代码是基于SQLite的一般使用方式,HarmonyOS的实际API调用可能会有所不同,但原理一致。请确保使用HarmonyOS SDK中的对应API。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部