HarmonyOS 鸿蒙Next 鸿蒙APP开发,怎么读取预制的DB文件

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 鸿蒙APP开发,怎么读取预制的DB文件

有个问题请教下,我在rawfile目录下有个test.db文件,里面是有数据的。app运行时我要怎么才能将里面内容读取出来呢

9 回复

在HarmonyOS应用中,如果你想从rawfile目录读取一个SQLite数据库文件(如test.db),你可以采用以下步骤:

1. 在代码中访问数据库文件
   在你的应用代码中,你需要先获取到rawfile目录下数据库文件的绝对路径。你可以使用Context对象的getRawFileDir()方法来得到rawfile目录的路径。

2. 创建或打开数据库
   使用SQLiteDatabase类的静态方法openOrCreateDatabase()来打开或创建数据库。你需要传递数据库文件的完整路径以及一个模式(SQLiteDatabase.OPEN_READONLY如果只读,或SQLiteDatabase.OPEN_READWRITE如果需要读写权限)。

下面是一个示例代码,演示了如何打开rawfile目录下的test.db文件:

java<br>import&nbsp;ohos.agp.utils.io.FileInputStream;<br>import&nbsp;ohos.agp.utils.io.FileOutputStream;<br>import&nbsp;ohos.agp.utils.io.IOException;<br>import&nbsp;ohos.agp.utils.io.InputStream;<br>import&nbsp;ohos.agp.utils.io.OutputStream;<br>import&nbsp;ohos.app.Context;<br>import&nbsp;ohos.data.ormlite.Database;<br>import&nbsp;ohos.data.ormlite.DatabaseException;<br>import&nbsp;ohos.data.ormlite.Statement;<br>import&nbsp;ohos.data.sqlcipher.DatabaseUtils;<br>import&nbsp;ohos.data.sqlcipher.SQLiteDatabase;<br>import&nbsp;ohos.data.sqlcipher.SQLiteOpenHelper;<br><br>public&nbsp;class&nbsp;DatabaseHelper&nbsp;extends&nbsp;SQLiteOpenHelper&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;String&nbsp;DATABASE_NAME&nbsp;=&nbsp;"test.db";<br>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;int&nbsp;DATABASE_VERSION&nbsp;=&nbsp;1;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;DatabaseHelper(Context&nbsp;context)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(context,&nbsp;DATABASE_NAME,&nbsp;null,&nbsp;DATABASE_VERSION);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onCreate(SQLiteDatabase&nbsp;db)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果数据库不存在,你可以在这里创建数据库结构<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onUpgrade(SQLiteDatabase&nbsp;db,&nbsp;int&nbsp;oldVersion,&nbsp;int&nbsp;newVersion)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;如果数据库结构发生变化,你可以在这里升级数据库<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;SQLiteDatabase&nbsp;openDatabase()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;打开数据库<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;SQLiteDatabase.openOrCreateDatabase(getRawFileDir()&nbsp;+&nbsp;"/"&nbsp;+&nbsp;DATABASE_NAME,&nbsp;null);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;getRawFileDir()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;从Context中获取rawfile目录的路径<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;getContext().getRawFileDir();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br>

请注意,上面的代码示例是基于Android平台的伪代码,HarmonyOS的API可能有所不同。在HarmonyOS中,你需要使用对应的类和方法,例如使用ohos.data.distributed.common.DataAbilityHelperohos.data.rdb.RdbStore来处理数据库操作,但原理是相似的。

在实际应用中,你可能需要使用ORM框架如LitePal,或者自己编写SQL语句来查询和操作数据库。确保你对数据库的操作遵循最佳实践,例如使用事务处理和异常处理来保证数据的一致性和安全性。同时,考虑到性能和资源管理,你应该在不再需要数据库连接时及时关闭它。

日志台中有这样一条日志:Open database failed, err=14,不知道是不是这个原因导致的

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

我现在已经复制到沙箱目录下了(/包名/entry/rdb/test.db),但用
relationalStore配置name为test.db去读取时就读不到数据,不知道是什么原因。

不知道是不是模拟器不让读

你可以先试着建一个新数据库,如果不行,那就是模拟器不让读了

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

DB的沙箱目录要用Context.databaseDir获取,得到的路径类似 /data/storage/el2/database/entry,再加上子目录 rdb 为API实际操作路径,所以可能是保存路径不匹配默认路径无法被读取。

可以想到的是复制到沙箱数据库目录下,然后按正常数据库方式打开使用。

在HarmonyOS(鸿蒙)系统中进行APP开发时,读取预制的DB(数据库)文件通常涉及以下几个步骤:

  1. 资源文件放置:首先,将预制的DB文件放置在项目的assetsraw目录下(具体目录结构可能根据项目配置有所不同)。确保文件路径和名称正确无误。

  2. 访问权限配置:在config.json文件中,配置应用所需的文件访问权限,确保应用有权限读取指定的文件目录。

  3. 读取文件:在代码中,使用鸿蒙提供的文件读写API来访问预制的DB文件。这通常涉及使用FileIoManager或类似的类来打开文件,并获取其输入流(FileInputStream)进行读取。

  4. 数据库操作:一旦获取到DB文件的输入流,可以使用适当的数据库库(如SQLite)来打开并操作该数据库文件。

  5. 错误处理:在文件读取和数据库操作过程中,应添加适当的错误处理逻辑,以应对可能出现的文件不存在、权限不足等问题。

如果上述步骤正确无误,通常可以成功读取预制的DB文件。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部