中国优质的IT技术网站
专业IT技术创作平台
IT职业在线教育平台
沙箱文件目录 官方文档说明
获取数据库路径:
let 数据库路径='/data/storage/el2/database/entry/rdb/Mydata.db'
找到了数据库db文件,只导出这个db文件是没有用的!!!
因为还有db-wal这个临时文件。系统并没有把数据全部写入db,甚至重启手机也不行。
ArkTs提供了关系数据库的备份功能,能够将所有数据备份到备份数据库中,这样就可以曲线救国了。
/* • 数据库备份 */ 备份(){ this.数据库.backup('备份Mydata.db') } /* • 数据库恢复 */ 恢复(){ this.数据库.restore('备份Mydata.db') }
import RDB from '../RDB' //自己编写的数据库模块 import picker from '@ohos.file.picker'; //用于打开文件选择器 import fs from '@ohos.file.fs'; //文件拷贝用 @Entry @Component struct 获取文件{ async 导出(){ RDB.备份() //先进行备份获得全部数据,文件名固定为'备份Mydata.db' try { let 数据库文件='/data/storage/el2/database/entry/rdb/备份Mydata.db' //用文件选择器选择用户区目录和文件名进行保存 let 文件保存选项= new picker.DocumentSaveOptions(); //写好默认的文件名,如果存在同名文件,系统拷贝时会自动重命名 文件保存选项.newFileNames = ['备份Mydata.db']; let 文件选择器= new picker.DocumentViewPicker(); 文件选择器.save(文件保存选项).then((保存文件结果: Array<string>) => { let 目标uri=保存文件结果[0] let 目标文件=fs.openSync(目标uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE) fs.copyFile(数据库文件,目标文件.fd,).then(()=>{ //拷贝成功后关闭文件 fs.closeSync(目标文件.fd) }).catch((err)=>{ console.error('xxx','拷贝文件失败: ' , err.message , err.code) }) }).catch((err) => { console.error('xxx','DocumentViewPicker.save错误: ' + JSON.stringify(err)); }); } catch (error) { let err = error; console.error('xxx','DocumentViewPicker错误: ' + JSON.stringify(err)); } } }
async 导入(){ try { //不管从文件选择器中选择的文件名是什么,拷贝过来都固定为'备份Mydata.db' let 目标文件='/data/storage/el2/database/entry/rdb/备份Mydata.db' let 文件打开选项 = new picker.DocumentSelectOptions() let 文件选择器 = new picker.DocumentViewPicker(); 文件选择器.select(文件打开选项).then((选择文件: Array<string>) => { let 来源uri=选择文件[0] let 来源文件=fs.openSync(来源uri, fs.OpenMode.READ_ONLY) fs.copyFile(来源文件.fd,目标文件).then(()=>{ fs.closeSync(来源文件.fd) //从导入的文件'备份Mydata.db'恢复到数据库文件Mydata.db RDB.恢复() }).catch((err)=>{ console.error('xxx','导入文件失败: ' + err.message + ', error code: ' + err.code) }) }).catch((err) => { console.error('xxx','DocumentViewPicker.select错误: ' + JSON.stringify(err)); }); } catch (error) { let err = error; console.error('xxx','DocumentViewPicker错误: ' + JSON.stringify(err)); } }
微信扫码分享