繁体   English   中英

如何获取房间数据库大小

[英]How do I get Room database size

我想在我的 android 应用程序中监控我的 Room 数据库的大小。 我已经搜索了一段时间,发现关于如何做到这一点的信息很少。 是否有任何 Room (SQLite) 命令来确定数据库大小?

过了一会儿,四处搜索,我发现了一些我测试过的“旧”(又名古老)编译指示调用,并且它以某种方式工作。 不需要获得确切的值,而是使用的提示。

您可以像这样在 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>   
}

在数据 class "pojo" 中,您定义:

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

由于 pragma 查询的结果是 page_size 和 page_count。 这些以后可以成倍增加,或单独呈现。

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

还有许多其他实用程序查询可能有用,但您应该谨慎使用它们,因为其中一些可能会破坏 SQLite 数据库的稳定性。

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

感谢所有回答的人,您通过密集的谷歌搜索引导我走向正确的道路......

没试过,但应该是这样的:

fun getSize(context: Context, fileName: String) : Long {
    val file = context.getDatabasePath(fileName)
    return file.length()
}

正如@Commonsware 所建议的那样,除非已提交预写日志,否则它可能不准确(这是同一目录中的这些*.wal文件)。 并且不能只是将大小相加,而是必须检查数据库文件当前是否正在使用,如果是,请先关闭它。 另一种选择是.disableWriteAheadLogging() ,这是以牺牲一些性能为代价的。

In Android Studio in debug mode in either a device or emulator, you can use the Device File Explorer which is at bottom right of Android Studio , goto data -> data -> your package name (eg. com.myapp) -> databases :

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM