【问题标题】:How to get the current sqlite database size or package size in Android?如何在 Android 中获取当前的 sqlite 数据库大小或包大小?
【发布时间】:2011-06-15 21:23:37
【问题描述】:

我无法获取 Android 应用程序(或包)使用的数据总量,因为官方 API 支持已被删除:

http://groups.google.com/group/android-developers/browse_thread/thread/df94daae34336aad/f96a8425549c6637(这还是现在的情况吗?)

Getting installed app size(不支持的黑客 - 不要使用它)

那么有什么方法可以获取当前的 sqlite 数据库大小吗?我找到了一个 getMaxSize 方法或 getPageSize 但我找不到总页数。

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    您也可以在 sqlite 3.16.0+ 上使用此原始查询:

    SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size();
    

    它返回单行的“大小”列。

    【讨论】:

    • 哇 - 我在任何地方都找不到这些虚拟表记录...你有链接吗?
    • @w00t 自 3.16.0 起,返回结果且没有副作用的编译指示已作为表值函数提供 sqlite.org/pragma.html#pragfunc
    【解决方案2】:

    你可以用这两个查询数据库:

    pragma page_size;
    pragma page_count;
    

    (请参阅sqlite pragma 文档)。

    将第一个乘以第二个,您将得到使用的总页数。

    【讨论】:

    • 这可以工作,但我找不到一种方法来使用返回某些内容的 PRAGMA 执行 SQL 代码!有什么办法吗?
    • 只需像使用 RawQuery 查询一样运行每一个。 (一次一个,没有绑定参数)。这些应该返回一行。一些信息here 具有不同的编译指示。
    • 使用这种方法与检查数据库文件的长度相比,我得到了不同的结果。有时且仅在某些手机上,这会返回比数据库文件本身更大的大小。我通过将数据库文件复制到我的计算机来验证这一点。
    【解决方案3】:

    也许有人可以验证这是否是一种可接受的方法,但有一段时间我使用这个:

    File f = context.getDatabasePath(dbName);
    long dbSize = f.length();
    

    干杯

    【讨论】:

    • 这是为我做的;在我看来应该标记为答案
    • 这不包括-journal 文件大小,在write-ahead-log 的情况下还可能包含一些已提交的数据。
    【解决方案4】:

    只是补充一下大小。

    当我使用 DroidBot 的代码时,它可以工作。但是当数据输入数据库时​​(尤其是数据非常小),大小可能不会立即增加。数据库只会增加 1024 字节(例如从 8192 字节增加到 9216 字节)。

    所以,要立即看到数据库大小增加,请尝试放入大量数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-03
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      相关资源
      最近更新 更多