HarmonyOS鸿蒙Next中如何在ArkTS中实现访问本地已有的SQLite数据库文件
HarmonyOS鸿蒙Next中如何在ArkTS中实现访问本地已有的SQLite数据库文件 ArkTS如何实现访问本地已有的SQLite数据库文件,求助详细~~~
一、场景
读取本地已有数据的db文件
二、步骤
将sqlite的数据库文件拷贝至关系型数据库的沙箱目录 -> 通过relational的api获取数据库store -> 读取数据库
三、相关知识点
-
将预制的数据库,放在db文件的存在目录,保证文件的权限、属主正确,是可以正常访问的。
-
关系型数据库存储沙箱路径/data/app/el2/100/database/(bundleName)/entry/rdb/下的.db文件
四、主要代码
拷贝rawfile数据库文件至沙箱路径
saveFileToCache(file, 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 = {
offset: currentOffset, //期望读取文件的位置。可选,默认从当前位置开始读
length: bufferSize //每次期望读取数据的长度。可选,默认缓冲区长度
}
// 后面len会一直减,直到没有
while(true) {
// 读取buffer容量的内容
let readLength = fs.readSync(file.fd, buffer, readOption);
console.info("123")
// 写入buffer容量的内容
fs.writeSync(cacheFile.fd, buffer, {length:readLength}) //写到cacheFile里
// 判断后续内容 修改读文件的参数
// buffer没读满代表文件读完了
if (readLength < bufferSize) {
break;
}
readOption.offset += readLength;
}
console.log("Copy Success!!!")
fs.close(cacheFile);
// 展示cache目录下的文件名
// this.cacheDirFileList = fs.listFileSync(getContext(this).cacheDir);
}
aboutToAppear(){
// this.companyDB.GetCompanyStore();
let dirPath = getContext(this).getApplicationContext().databaseDir + "/entry"
fs.mkdirSync(dirPath);
dirPath = dirPath + "/rdb"
fs.mkdirSync(dirPath);
let dbName:string = 'muapp.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() + "DWSD")
this.saveFileToCache(value, dbName)
}
});
} catch (error) {
console.error(`callback getRawFd failed, error code: ${error.code}, message: ${error.message}.`)
};
}
获取数据库实例
GetCompanyStore(){
// 获取store实例
const STORE_CONFIG = {
name: 'Company.db',
securityLevel:relationalStore.SecurityLevel.S1
} ;
relationalStore.getRdbStore(this.context,STORE_CONFIG,(err,store) => {
if (err) {
console.error(`Failed to get RdbStore. Code:${err.code}, message:${err.message}`);
return;
}else{
console.info(`Succeeded in getting RdbStore.`);
}
this.rdbStore=store;
})
}
更多关于HarmonyOS鸿蒙Next中如何在ArkTS中实现访问本地已有的SQLite数据库文件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
老哥,这个将文件拷贝到沙箱的代码具体该如何使用呢
具体有哪些是在自己本地需要改动的地方呢
在HarmonyOS鸿蒙Next中,使用ArkTS访问本地SQLite数据库文件可以通过@ohos.data.relationalStore
模块实现。首先,使用getRdbStore
方法获取数据库实例,指定数据库路径和配置。然后,通过executeSql
或query
方法执行SQL语句或查询数据。确保数据库文件已放置在应用的/data/storage/el2/base/database/
目录下,并在config.json
中声明ohos.permission.READ_USER_STORAGE
权限。