1. 程式人生 > >SQLite Expert表分離和解決SQLite Expert刪除表後大小不變的問題

SQLite Expert表分離和解決SQLite Expert刪除表後大小不變的問題

大小 nbsp where 效果 外鍵 mob 一點 冗余 java代碼

最後要使用到號碼歸屬地的查詢,在網上找到一個數據庫文件。大小有12M多,壓縮成zip也有1.9M,這樣對於一個apk的大小非常不利,後來看了一下數據庫的內容,發現有非常多冗余。特別是中文字符占用非常大的空間,在網上找了一種方法把一個表進行分離。分成兩個表,兩個表之間能夠使用外鍵的形式進行關聯。這裏用到的幾個表名:tb_city、mob_location、tb_mobile,終於是要把表mob_location分離成tb_city、tb_mobile在SQLite Expert上能夠使用sql語句,這裏僅僅講一些我覺得關鍵的部分,如創建表、新建字段打開數據庫、設置主鍵、外鍵這些都不講,對於SQLite Expert一點都不懂的朋友能夠先百度下怎樣使用。把查詢到的數據插入到指定表中。去掉反復的

insert into tb_city(location, areacode) select location, areacode from mob_location group by location

同一時候查詢兩個表
select * from tb_city, mob_location where tb_city.[location] = mob_location.[location]

select * from tb_city, tb_mobile where tb_city.[_id] = tb_mobile.[foreign_id] and tb_mobile.[number] = 1342797
以上語句在java代碼中也是適用的,如代碼中使用:
String sql = "select * from tb_city, tb_mobile where tb_city.[_id] = tb_mobile.[foreign_id] and tb_mobile.[number] = " + num;

把兩個表查詢得到的數據插入到一個表中
insert into tb_mobile(foreign_id, number) select tb_city.[_id], mob_location.[_id] from tb_city, mob_location where tb_city.[location] = mob_location.[location]

到這裏就把表mob_location分離成tb_city、tb_mobile了,此時看下數據庫大小為16M,就把表mob_location右鍵刪除,但發現數據庫的大小沒有不論什麽改變。後來查出來刪除僅僅是把它放到緩存。並沒有清空,須要在數據庫上右鍵->vacuum,點擊清空,再去看下大小就僅僅有3M多一點,這樣容量少了非常多,再做下zip壓縮,但壓縮的效果不是非常理想。

數據庫和代碼能夠到下面鏈接下載:

http://pan.baidu.com/s/1sjFWJRv


SQLite Expert表分離和解決SQLite Expert刪除表後大小不變的問題