如何获得会议室数据库的大小

时间:2020-05-24 16:09:23

标签: android sqlite kotlin android-room

我想在我的android应用程序中监视Room数据库的大小。我搜索了一会儿,发现很少有关该怎么做的信息。是否有任何Room(SQLite)命令来确定数据库大小?

3 个答案:

答案 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

enter image description here

答案 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搜索将我带到了正确的路...