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