我想在我的android应用程序中监视Room数据库的大小。我搜索了一会儿,发现很少有关该怎么做的信息。是否有任何Room(SQLite)命令来确定数据库大小?
答案 0 :(得分:0)
还没有尝试过,但是应该是这样的:
fun getSize(context: Context, fileName: String) : Long {
val file = context.getDatabasePath(fileName)
return file.length()
}
如@Commonsware所建议,除非提交了预写日志,否则它可能是不准确的(这是同一目录中的*.wal
个文件)。而且,不仅可以增加大小,还必须检查数据库文件当前是否正在使用,如果正在使用,请先关闭它。另一个选择是.disableWriteAheadLogging()
,这是以牺牲性能为代价的。
答案 1 :(得分:0)
在设备或仿真器处于调试模式的Android Studio中,您可以使用位于Device File Explorer
右下角的Android Studio
,转到data -> data -> your package name (eg. com.myapp) -> databases
:
答案 2 :(得分:0)
一段时间后,我到处搜索,发现了一些我测试过的“古老的”(又名古老的)编译指示,并且以某种方式起作用。不需要获取确切的值,而是使用的提示。
您可以像这样在房间中执行@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
)
由于编译指示查询的结果为page_size和page_count。这些主题随后可以相乘,也可以分别显示。
您可以在此处了解有关SQLite编译指示的信息: https://www.sqlite.org/pragma.html
还有许多其他杂用查询可能有用,但是您应该明智地使用它们,因为其中一些可能破坏SQLite DB的稳定性。
Android IDE / lint可能使这些命令无效(红色),但是如果您具有AS4.1Cx(C6 +),则可以在数据库检查器工具中运行其中的一些命令,以查看它们是否有效。我已经在此处提交了一个issuetracker事件:https://issuetracker.google.com/157374656
感谢所有回答的人,您通过密集的Google搜索将我带到了正确的路...