我正在尝试按以下方式做点什么:
SELECT bytes from user_segments where segment_name = 'TABLE_NAME';
我知道我可以通过
获得整个数据库的大小mDb = SQLiteDatabase;
long size = new File(mDb.getPath()).length();
在Android的SQLiteDatabase中,是否可以获取单个表在存储空间中占用的空间?
编辑 -
由于缺乏回应,我猜这对SQLite来说是不可能的。我目前正在使用一种hack-ish方式,我计算表中的行数并估计单行占用多少空间(基于给定的表模式)。
答案 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();