ANDROID:查找SqliteDatabase中各个表的大小

时间:2012-04-22 02:42:05

标签: android size sqlite

我正在尝试按以下方式做点什么:

SELECT bytes from user_segments where segment_name = 'TABLE_NAME';

我知道我可以通过

获得整个数据库的大小
mDb = SQLiteDatabase;
long size = new File(mDb.getPath()).length();

在Android的SQLiteDatabase中,是否可以获取单个表在存储空间中占用的空间?

编辑 -

由于缺乏回应,我猜这对SQLite来说是不可能的。我目前正在使用一种hack-ish方式,我计算表中的行数并估计单行占用多少空间(基于给定的表模式)。

1 个答案:

答案 0 :(得分:1)

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

SELECT SUM(LENGTH(the_column)) FROM the_table

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

在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();