android - 如何获取 Room 数据库大小

标签 android sqlite kotlin android-room

我想在我的 Android 应用程序中监控我的 Room 数据库的大小。我四处搜索了一段时间,发现关于具体如何执行此操作的信息很少。是否有任何 Room (SQLite) 命令来确定数据库大小?

最佳答案

一段时间后,四处搜索,我发现了一些我测试过的“旧的”(又名古老的)pragma 调用,并且它以某种方式起作用。不需要获取确切的值,但需要提示用法。

您可以像这样在 Room 中执行 @Dao @Query:

@Dao
interface SystemDao{
  @Query("""
    SELECT s.*, c.* 
    FROM pragma_page_size as s
    JOIN pragma_page_count as c
  """)
  suspend fun getDatabaseSizeInfo():List<SystemDatabaseSizeInfo>   
}

在你定义的数据类“pojo”中:

data class SystemDatabaseSizeInfo(
  var page_size:Int?=null,
  var page_count:Int?=null
)

因为 pragma 查询的结果是 page_size 和 page_count。这些以后可以相乘,或单独呈现。

您可以在此处阅读有关 SQLite pragma 调用的信息: https://www.sqlite.org/pragma.html

还有许多其他实用查询可能有用,但您应该明智地使用它们,因为其中一些可能对 SQLite 数据库的稳定性造成破坏。

Android IDE/lint 可能会使这些命令无效(红色),但如果您有 AS4.1Cx (C6+),您可以在数据库检查器工具中运行其中一些命令以查看它们是否有效。我已经在这里提交了一个 issuetracker 事件:https://issuetracker.google.com/157374656

感谢所有回答的人,您通过深入的谷歌搜索引导我走上了正确的道路...

关于android - 如何获取 Room 数据库大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61988697/

相关文章:

android - 无法通过 Phonegap 中的 Plugman 安装插件

list - 如何在 Kotlin 中并行迭代两个列表?

android - 如何禁用底部导航 View 的菜单项?

android - 滚动时的Recycler View 和卡片创建多个副本

java - Android使用recyclerview、cardview和volley从php mysql加载完整图像

java - 如何从 json 数组中检索数据并显示在 textview 中?

android - TabLayout 选项卡选择问题

java - 预先创建的 SQLite 数据库集成到 Android 应用程序中

python - pysqlite:列名或表名的占位符替换?

android - 如何在 Android SQLite 中使用 TRIGGER