首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得空间数据库大小

如何获得空间数据库大小
EN

Stack Overflow用户
提问于 2020-05-24 16:09:23
回答 3查看 2K关注 0票数 3

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-25 08:50:40

过了一段时间,我四处搜寻,发现了一些我测试过的“旧”(又称古)语用电话,它不知何故起了作用。不是需要得到确切的值,而是一个用法的提示。

您可以在Room中执行如下@Dao @查询:

代码语言:javascript
复制
@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“中定义:

代码语言:javascript
复制
data class SystemDatabaseSizeInfo(
  var page_size:Int?=null,
  var page_count:Int?=null
)

因为来自杂注查询的结果是page_size和page_count。它们以后可以相乘,也可以单独表示。

您可以在这里阅读有关SQLite实用化调用的文章:https://www.sqlite.org/pragma.html

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

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

谢谢你的回答,你用谷歌搜索我找到了正确的道路.

票数 4
EN

Stack Overflow用户

发布于 2020-05-24 16:43:23

还没有试过,但应该是类似的:

代码语言:javascript
复制
fun getSize(context: Context, fileName: String) : Long {
    val file = context.getDatabasePath(fileName)
    return file.length()
}

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

票数 1
EN

Stack Overflow用户

发布于 2020-05-25 02:35:35

在设备或模拟器中处于调试模式的Android中,您可以使用位于Device File Explorer右下角的Android Studio,goto data -> data -> your package name (eg. com.myapp) -> databases

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61988697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档