【问题标题】:Android SQLite Get size of a table in kbAndroid SQLite 获取表的大小(以 kb 为单位)
【发布时间】:2019-12-18 06:12:08
【问题描述】:

我创建了一个 SQLite 数据库,其中包含两个表:day 和 data。第一个表包含每天的日期,带有一个id,第二个表存储每天对应的数据,带有日期的id。

是否可以获取以 kb 为单位的表数据大小,或者仅获取每天的数据大小?

【问题讨论】:

  • 出了什么问题?

标签: android sqlite


【解决方案1】:

是否可以获取以 kb 为单位的表格数据大小,或者仅获取每天的数据大小?

Kb per table 不容易,如果有的话。

  • 表格由页面组成(默认为 4K)。一个页面可能包含 0 行。您可以轻松获取整个数据库的大小,但这并不表示每个表使用的页数。

您可以利用length() 函数收集存储数据大小的近似值。

对于 example(请注意一个关于长度的非常简单的示例,因为这取决于字符编码,例如在 UTF-8 中,一个字符可以占用 1-4 个字节)consdier 基于以下内容您的描述(2 个表格daydata

DROP TABLE IF EXISTS day;
DROP TABLE IF EXISTS data;

CREATE TABLE IF NOT EXISTS day (id INTEGER PRIMARY KEY, date TEXT UNIQUE);
CREATE TABLE IF NOT EXISTS data(id INTEGER PRIMARY KEY, dateofdata_reference INTEGER REFERENCES day(id) ON DELETE CASCADE ON UPDATE CASCADE, datacolumn1 TEXT, datacolumn2 TEXT);

/* Add 3 days */
INSERT INTO day (date) VALUES('2019-01-01'),('2019-01-02'),('2019-01-03');
/* Add some data to each day assuming id of a day as 1,2 and then 3 for the 3 days */
INSERT INTO data (dateofdata_reference, datacolumn1,datacolumn2) VALUES
    (1,'A','XYZ'),(1,'ABC','UVW'),(1,'ABCD','RST') /* day 1 */
    ,(2,'Z','ZYX'),(2,'Y','WVU'),(2,'ZZ','TSR'),(2,'YYY','QPO') /* day 2 */
    ,(3,'J','1234567890') /* day 3 */
;

/* Combined length of data for entire table (excludes 1 and dateofdata_reference) */ 
SELECT sum(length(datacolumn1)) + sum(length(datacolumn2))  AS size FROM data;

/* Combined length of data and other stats per day (excludes id and dateofdata_reference) */ 
SELECT 
    date,
    sum(length(datacolumn1)) + sum(length(datacolumn2)) AS size,
    count() AS rowsPerDay,
    avg(length(datacolumn1) + length(datacolumn2)) AS averageRowSize,
    avg(length(datacolumn1)) AS averageDataColumn1Size,
    avg(length(datacolumn2)) AS averageDataColumn2Size

FROM data AS a
    JOIN day ON dateofdata_reference = day.id 
GROUP BY dateofdata_reference;


/* Cleanup demo environment */
DROP TABLE IF EXISTS data;
DROP TABLE IF EXISTS day;

第一个(大约表大小)查询结果:-

第二个(每天的统计数据)结果:-

【讨论】:

  • 嗨,迈克,感谢您的详细回复。我决定使用以下代码显示孔 db 的大小: long size = new File(db.getPath()).length();来自德国的问候
猜你喜欢
  • 2020-04-20
  • 1970-01-01
  • 2023-02-04
  • 2011-09-10
  • 1970-01-01
  • 2014-02-19
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多