我想在我的android应用程序中监控我房间数据库的大小。我已经搜索了一段时间,发现了很少的信息,确切地说,如何做到这一点。是否有任何Room (SQLite)命令来确定db大小?
发布于 2020-05-25 08:50:40
过了一段时间,我四处搜寻,发现了一些我测试过的“旧”(又称古)语用电话,它不知何故起了作用。不是需要得到确切的值,而是一个用法的提示。
您可以在Room中执行如下@Dao @查询:
@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
)因为来自杂注查询的结果是page_size和page_count。它们以后可以相乘,也可以单独表示。
您可以在这里阅读有关SQLite实用化调用的文章:https://www.sqlite.org/pragma.html
还有许多其他的实用查询可能很有用,但您应该谨慎地使用它们,因为其中一些查询可能会破坏SQLite DB的稳定性。
Android /lint可能会使这些命令无效(红色),但如果您有AS4.1Cx (C6+),则可以在数据库检查工具中运行其中的一些命令,以查看它们是否有效。我已经在这里提交了一个问题跟踪器事件:https://issuetracker.google.com/157374656
谢谢你的回答,你用谷歌搜索我找到了正确的道路.
发布于 2020-05-24 16:43:23
还没有试过,但应该是类似的:
fun getSize(context: Context, fileName: String) : Long {
val file = context.getDatabasePath(fileName)
return file.length()
}正如@Commonsware所建议的,除非已经提交了预写日志,否则它可能是不准确的(这是位于同一个目录中的这些*.wal文件)。我们不能仅仅将大小相加,而是必须检查数据库文件是否正在使用,如果是的话,首先关闭它。另一种选择是.disableWriteAheadLogging(),它以牺牲一些性能为代价。
发布于 2020-05-25 02:35:35
在设备或模拟器中处于调试模式的Android中,您可以使用位于Device File Explorer右下角的Android Studio,goto data -> data -> your package name (eg. com.myapp) -> databases

https://stackoverflow.com/questions/61988697
复制相似问题