android - 特定于应用程序的文件夹与外部文件夹中的 Android DB
问题描述
我有一个将数据写入数据库的 Android 应用程序。最初,当我们开始时,我们将 db 存储在特定于应用程序的文件夹中(例如 /storage/org.domain.app/db/db.sync 等)。事情没有问题。但是,问题是每次我们重新安装应用程序时这个数据库都会被清除。
因此,我们将数据库移动到应用程序外部的不同文件夹中。(现在路径类似于 /storage/data/db/db.sync)。现在,如果我们重新安装应用程序,我们仍然有旧的数据库条目。但是,现在读取和写入数据库要慢得多。
我不确定这种缓慢是否是因为数据量猛增。由于数据现在可以在多次重新安装后保持不变。
我怀疑这也可能是因为数据库现在位于应用程序外部的文件夹中。为了排除这种情况,我将数据库设置在一个特定于应用程序的文件夹中,并打算从以前的一些测试中复制整个数据库(其中包含更多数据 - 导致数据库访问速度变慢的数据量)。但是,我无法这样做。
一些问题: 1. 我无法实际访问设置数据库的文件夹。该文件夹是在 Context.MODE_PRIVATE 模式下创建的。因此,只有应用程序本身可以访问它。我尝试将其更改为 MODE.WORLD_READABLE。但是,这已被弃用并在使用时引发异常。有没有办法让这个文件夹很容易编辑?
我还尝试从 Android Studio 中的设备文件资源管理器访问数据库。我打开了现有的数据库(db.sync 文件),然后复制粘贴了我已经拥有的大型数据库。但是,看起来这种方法不允许我们复制甚至显示超过 400 KB 的信息。我拥有的数据库约为 60-70 MB。因此,这种方法也不起作用。有没有办法可以编辑 db.sync 文件?
数据库位于应用程序外部的文件夹中是否会使其变慢?特别是当条目太多时。在我的例子中,某些搜索操作是通过本地缓存发生的,并且发生在 giffy 中。但是,我们还需要将一些内容记录到数据库中,这需要很长时间。我通过在代码中添加计时器日志来解决这个问题。
还有什么,我可以做些什么来确定数据库路径是否导致了问题?
谢谢, 阿南德
解决方案
推荐阅读
- syntax - &Trait 和 impl Trait 用作方法参数时有什么区别?
- c++ - 如何在不知道其返回类型的情况下检查类是否具有模板化调用运算符?
- php - PHPMailer autoload.php 无法打开
- java - 如何制作一个当按下它时执行新操作的 JButton
- spring-boot - Angular OAuth2 集成
- makecode - 块名称中的换行符
- swift - 在热敏蓝牙打印机上以编程方式更改字体大小
- python - 交替重新排列Dataframe的行
- svn - TFS 2018 build - svn 连接不适用于“获取源”步骤
- datastage - 在 Datastage Transformer 中使用约束过滤数据