2012-04-22 47 views
4

我試圖做的大意如下的內容:ANDROID:尋找各個表的大小,一個SQLiteDatabase

SELECT bytes from user_segments where segment_name = 'TABLE_NAME'; 

我知道我可以通過

mDb = SQLiteDatabase; 
long size = new File(mDb.getPath()).length(); 
得到整個數據庫的大小

是否有可能獲得單個表在Android的SQLiteDatabase存儲中佔用多少空間?

EDIT--

因缺乏響應的,我想這是不可能的SQLite。我正在使用hack-ish方式來計算表中的行數,並估計單個行佔用多少空間(基於給定的表模式)。即使每行的大小變化很大(對

SELECT SUM(LENGTH(the_column)) FROM the_table 

這可以給你一個合理的估計:

回答

1

如果你主要是二進制或字符串數​​據存儲在一個單一的列,您可以使用聚合查詢例如,如果您將圖片存儲在數據庫中)。但是,如果您有許多列中包含少量數據,則您的方法(估算每行的固定大小)會更好。

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

返回長列的總和我怎麼能拿導致字節請讓我知道嗎? – 2012-11-05 07:12:12

+0

AFAIK SQLite沒有函數的字節數,除非您將數據存儲爲二進制blob而不是文本。如果您大部分使用英文文本並使用UTF-8,則字節數應該近似等於字符數。 – Ralf 2012-11-05 12:20:05

+0

非常感謝你..... – 2012-11-05 12:30:06