在离线数据库中存储图像、文本注释和音频文件的方式。安卓、Java
Posted
技术标签:
【中文标题】在离线数据库中存储图像、文本注释和音频文件的方式。安卓、Java【英文标题】:Way to store images, text notes and audio files in offline database. Android, Java 【发布时间】:2021-12-10 05:37:56 【问题描述】:我想创建一个应用程序,我可以在其中将文本、图像和音频笔记保存到 离线 数据库(无需互联网连接),然后以类似列表的布局显示它们。不想将文件直接保存到内部存储。
这是我第一次创建移动应用程序,因此我需要帮助来为此类用例选择正确的数据库。有什么建议吗?
【问题讨论】:
android 应用程序通常使用 SQlite 来完成此任务。你为什么不愿意?但是......我听说将图像存储在数据库中是一个坏主意。你为什么要这样做? 也许不是将文件存储在数据库中,而是将文件保存在设备上并存储文件的路径? 是的,没关系。 @virouz98 【参考方案1】:首先要知道: android 中的数据库是SQLite,所以任何其他离线数据库都只是一个layer 用于管理 SQLite 数据库,它只保存数字和文本数据,但您可以通过创建 保存任何其他类型,如图像、音频、数组...等转换器 将其保存在数据库中。
例如:您可以保存BitMap
-图像类型-,方法是将其转换为ByteArray
-0 和 1 的列表-,然后转换 ByteArray
转为String
-默认文本类型-,然后就可以保存到数据库中了,当你要选择值的时候,反之即可(String
->ByteArray
- > BitMap
),所以这里的诀窍是知道如何在类型之间进行转换。
现在答案是: 最好的离线数据库是 RoomDatabase,它是创建和管理 SQLite 数据库的最快方法,使用 Room,您无需从头开始构建 SQLite 数据库,它会为您构建它,并且具有创建转换器的好方法. 但是对于初学者来说,标准的 SQLite 已经绰绰有余了,如果你会看到 RoomDB 更难的话。
【讨论】:
SQLite 不能处理 blob? 转换器存储的图像 100% 工作,但如果您的意思是直接将 blob 插入数据库,我认为是行不通的。 在sqlite.org/faq.html 中他们说“SQLite 允许您存储 BLOB 数据”但是否直接,我不知道【参考方案2】:我认为您可能会混淆某些术语。 虽然您可以将各种媒体放在数据库中。有时它不是最实用的解决方案。听起来您可能正在考虑文件存储,而不是数据库。 此外,这些文件必须存在于某个地方,如果不是在外部服务器/数据库上,那么它们就必须驻留在本地设备上。您的应用程序不会运行本地数据库服务,以便它可以存储媒体文件。这将是大量开销并占用大量资源。
【讨论】:
以上是关于在离线数据库中存储图像、文本注释和音频文件的方式。安卓、Java的主要内容,如果未能解决你的问题,请参考以下文章