ANDROID:在SqliteDatabase中查找单个表的大小

Jin*_*Jin 5 sqlite size android

我正在尝试按照以下方式进行操作:

SELECT bytes from user_segments where segment_name = 'TABLE_NAME';
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过以下方式获得整个数据库的大小

mDb = SQLiteDatabase;
long size = new File(mDb.getPath()).length();
Run Code Online (Sandbox Code Playgroud)

是否有可能获得单个表在Android的SQLiteDatabase中占用的存储空间?

编辑 -

由于缺乏响应,我猜想SQLite无法实现。我目前正在使用一种hack-ish方式,其中我计算表中的行数并估计单行占用的空间(基于给定的表模式)。

Ral*_*alf 4

如果您主要将二进制或字符串数​​据存储在单列中,则可以使用聚合查询:

SELECT SUM(LENGTH(the_column)) FROM the_table
Run Code Online (Sandbox Code Playgroud)

即使每行的大小变化很大(例如,如果您将图片存储在数据库中),这也可以为您提供合理的估计。但是,如果您有许多列,每列中的数据量都很小,那么您的方法(估计每行的固定大小)会更好。

在Android上,你可以像下面这样实现:

SQLiteDatabase database = ... // your database
// you can cache the statement below if you're using it multiple times
SQLiteStatement byteStatement = database.compileStatement("SELECT SUM(LENGTH(the_column)) FROM the_table");
long bytes = byteStatement.simpleQueryForLong();
Run Code Online (Sandbox Code Playgroud)