Mapbox源碼分析(6)數(shù)據(jù)庫初始化

簡介:

通過源碼,我們來一步步分析Mapbox地圖引擎初始化本地數(shù)據(jù)庫的流程箭窜,這里是基于5.3.0的版本.

#### 注意

當(dāng)我寫這篇博客的時候彩郊,在官方changlog看到后續(xù)版本中對FileSource激活部分有做改動,這里暫時以現(xiàn)有版本為主毒坛,需要詳細(xì)了解的同學(xué)可以下載新版本的源碼了解

Mapbox提供了地圖的離線下載存儲功能,那么它是什么時候創(chuàng)建本地數(shù)據(jù)庫的呢林说,我們看到NativeMapView的構(gòu)造方法

這里我們看到它拿到了FileSource對象的實(shí)例,在這個類的注解中煎殷,我們知道它是負(fù)責(zé)激活本地數(shù)據(jù)源的,那么我們看看它的getInstance()方法

這里我們可以看出這是一個單例模式腿箩,我們看到它傳入了一個緩存路徑豪直,那么這個路徑會不會就是數(shù)據(jù)庫存放的路徑呢,我們繼續(xù)往下看

這里我們看到它調(diào)用了底層的初始化方法珠移,那么我們看看和這個對應(yīng)的底層文件file_source.cpp

這里我們看到它在傳入的路徑后面加了"/mbgl-offline.db"弓乙,這個路徑果然是數(shù)據(jù)庫路徑,我們看到在這個構(gòu)造方法中實(shí)例化了一個DefaultFileSource對象钧惧,那么我們看看DefaultFileSource對象的構(gòu)造方法

這里我們發(fā)現(xiàn)他又初始化了它的Impl實(shí)現(xiàn)類暇韧,那么我繼續(xù)看它的實(shí)現(xiàn)類

這里我們看到在它的構(gòu)造方法中,又執(zhí)行了initializeOfflineDatabase()方法浓瞪,從這個方法名可以看出是初始化數(shù)據(jù)庫懈玻,我們看到這個方法里面有實(shí)例化一個OfflineDatabase對象,我們看看這個對象

這里看出并未做什么乾颁,初始化值之后涂乌,便調(diào)用了ensureSchema()方法,我們看看這個方法

到這里基本就可以看出來了首先是通過connect()方法連接數(shù)據(jù)庫英岭,我們先看看connect()方法

這里我就把相關(guān)代碼放一起了湾盒,我們看到connect()方法實(shí)例化了一個Database對象,并通過DatabaseImpl類調(diào)用sqlite3_open_v2()打開了一個數(shù)據(jù)庫诅妹,那么和離線瓦片數(shù)據(jù)相關(guān)的表是怎么創(chuàng)建的呢罚勾,這里我們回到上面的ensureSchema()代碼處,看到有這么一行

```c++

#include "offline_schema.cpp.include"

```

我們找到這個文件看看,我們找到該文件在 platform/default/mbgl/storage目錄下

看到這里我們明白了荧库,這里將相關(guān)創(chuàng)建表的語句定義成schema變量堰塌,通過#include引入到代碼中,然后通過db->exec(schema)執(zhí)行創(chuàng)建表分衫,有關(guān)數(shù)據(jù)庫初始化的過程就到這里了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末场刑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蚪战,更是在濱河造成了極大的恐慌牵现,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邀桑,死亡現(xiàn)場離奇詭異瞎疼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)壁畸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門贼急,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捏萍,你說我怎么就攤上這事太抓。” “怎么了令杈?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵走敌,是天一觀的道長。 經(jīng)常有香客問我逗噩,道長掉丽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任异雁,我火速辦了婚禮捶障,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘片迅。我一直安慰自己残邀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布柑蛇。 她就那樣靜靜地躺著芥挣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耻台。 梳的紋絲不亂的頭發(fā)上空免,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音盆耽,去河邊找鬼蹋砚。 笑死扼菠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坝咐。 我是一名探鬼主播循榆,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼墨坚!你這毒婦竟也來了秧饮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤泽篮,失蹤者是張志新(化名)和其女友劉穎盗尸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帽撑,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泼各,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了亏拉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扣蜻。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖专筷,靈堂內(nèi)的尸體忽然破棺而出弱贼,到底是詐尸還是另有隱情,我是刑警寧澤磷蛹,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站溪烤,受9級特大地震影響味咳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜檬嘀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一槽驶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸳兽,春花似錦掂铐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至衷掷,卻和暖如春辱姨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背戚嗅。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工雨涛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枢舶,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓替久,卻偏偏與公主長得像凉泄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蚯根,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容