5

我正在尝试按照以下方式做一些事情:

SELECT bytes from user_segments where segment_name = 'TABLE_NAME';

我知道我可以通过

mDb = SQLiteDatabase;
long size = new File(mDb.getPath()).length();

是否可以获得单个表在 Android 的 SQLiteDatabase 中的存储空间?

编辑 -

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

4

1 回答 1

3

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

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();
于 2012-10-11T15:02:33.907 回答