Android:Sqlite 数据库 getMaximumSize() 以啥单位返回大小?

Posted

技术标签:

【中文标题】Android:Sqlite 数据库 getMaximumSize() 以啥单位返回大小?【英文标题】:Android: Sqlite database getMaximumSize() returns size in what unit?Android:Sqlite 数据库 getMaximumSize() 以什么单位返回大小? 【发布时间】:2016-06-04 18:38:58 【问题描述】:

我们从SQLiteDatabase对象的getMaximumSize()方法得到的值的单位是什么。

android 文档不包含有关该设备的信息。 http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#getMaximumSize%28%29

在我的 Android 平板电脑上执行该方法后,我得到了值4398046507008

如果单位是位那么它等于549GB 如果单位是字节则等于4398GB

我检查了Settings 应用程序的Storage&USB 部分,我发现它只有12GB 的内部存储。看起来有些不对劲。

在我的一个应用程序中,我想显示可用于存储缓存 Web 服务数据的总空间和已用空间。

【问题讨论】:

【参考方案1】:

我正在查看的源代码中该方法的实现是这样的:

public long getMaximumSize() 
    long pageCount = DatabaseUtils.longForQuery(this, "PRAGMA max_page_count;", null);
    return pageCount * getPageSize();

getPageSize() 根据文档返回字节数,因此这也返回字节数。

【讨论】:

这里有很多不一致的地方,实际返回的数字太大,有没有办法得到设备限制的最大尺寸? 在纯粹的实用术语中,该值来自以下两个 sqlite 逗号的结果:PRAGMA page_size 乘以 PRAGMA max_page_count。你可以在这里阅读它们:sqlite.org/pragma.html 现在,你得到的最大值可能只是理论上的最大值。这些值会随着时间而改变。根据此信息,您可能会发现该方法的结果没有帮助,这是它自己的问题。您可能还需要注意,这个值可能仅在您之前调用过 setMaximumSize() 时才有用。 因此,如果这种方法在实际情况下无用,您能否建议一种方法来实现我在之前的评论中提出的问题? 限制将基于数据库所在文件系统上的当前可用空间量,并且会随着时间而改变。所以我真的不认为你可以提前知道实际的限制。如何确定 Android 设备上的可用空间的问题已经在其他地方得到解答。

以上是关于Android:Sqlite 数据库 getMaximumSize() 以啥单位返回大小?的主要内容,如果未能解决你的问题,请参考以下文章

Android-SQLite和SQLiteOpenHelper

如何在Android设备中用NDK编译SQLite并且对SQLite进行操作

Android SQLite使用

Android SQLite详解

Android SQLite详解

Android数据库代码优化 - 从SQLite说起