java - 一旦部署在 Android 设备上,你能否即时运行 "compact"SQLite 数据库?

标签 java android sqlite

在创建了我的第一个用于 Android 应用程序的 SQLite 数据库之后,我发现它在经过一些“删除表”操作等之后非常需要压缩。然后在阅读了一些 SQLite 文档之后,我明白了为什么 - 这不像对于大多数数据库,SQLite 使用可变长度记录来非常有效地存储数据。但这对我来说表明,在日常使用中,它需要一直压缩以保持最佳空间效率——尤其是在内部存储器非常宝贵的 Android 设备上。

那么,一旦您的 Android 应用部署到设备上,是否可以通过编程方式完成此操作?经常这样做是常见的做法还是明智的做法?我问这个是因为我不知道 Android 设备的内部存储器是什么类型的存储器 - 如果它是像 SD 卡这样的闪存那么不断更改数据库(或实际上任何文件)对其使用生命周期不利,会它不是?

最佳答案

以后插入的任何新数据都会重新使用释放的空间。 (这与可变长度记录无关。)

如果您删除了大量数据并且知道空闲空间在不久的将来不会被重复使用,您可以执行 VACUUM命令。

经常这样做可能会影响闪存的使用生命周期。 但是,如果您经常这样做,您会经常确实在数据库文件释放之前使用它的空间,因此仅仅为了稍后扩展而压缩文件是没有意义的。 因此,闪存生命周期的考虑与何时执行 VACUUM 的问题无关。

关于java - 一旦部署在 Android 设备上,你能否即时运行 "compact"SQLite 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17132967/

相关文章:

java - 将 XML 数据读取到文本文件中

android - OSMDroid 为 CompassOverlay 设置点击

android - 如何在android中更新sqlite数据库中的联系人?

python - 我可以将数据暂存到内存中选择,然后选择回滚或在sqlite3中提交吗? python 2.7

java - 如何传递 VM 参数以在 tomcat 服务器启动时运行?

java - Eclipse 中是否有用于为装饰器生成代码的快捷方式?

android - 如何在 Android 上以 ListView 显示文件

java - 无法在数据库android中插入

java - 为什么我无法使用表列设置 JTable

android - TableRow 的单个子级不会延伸到 match_parent