一戴涝、內(nèi)存數(shù)據(jù)庫(kù):
在SQLite中究抓,數(shù)據(jù)庫(kù)通常是存儲(chǔ)在磁盤文件中的屋灌。然而在有些情況下邪财,我們可以讓數(shù)據(jù)庫(kù)始終駐留在內(nèi)存中陕壹。最常用的一種方式是在調(diào)用sqlite3_open()的時(shí)候,數(shù)據(jù)庫(kù)文件名參數(shù)傳遞":memory:"树埠,如:
rc = sqlite3_open(":memory:", &db);
在調(diào)用完以上函數(shù)后糠馆,不會(huì)有任何磁盤文件被生成,取而代之的是怎憋,一個(gè)新的數(shù)據(jù)庫(kù)在純內(nèi)存中被成功創(chuàng)建了又碌。由于沒(méi)有持久化,該數(shù)據(jù)庫(kù)在當(dāng)前數(shù)據(jù)庫(kù)連接被關(guān)閉后就會(huì)立刻消失绊袋。需要注意的是毕匀,盡管多個(gè)數(shù)據(jù)庫(kù)連接都可以通過(guò)上面的方法創(chuàng)建內(nèi)存數(shù)據(jù)庫(kù),然而它們卻是不同的數(shù)據(jù)庫(kù)癌别,相互之間沒(méi)有任何關(guān)系期揪。事實(shí)上,我們也可以通過(guò)Attach命令將內(nèi)存數(shù)據(jù)庫(kù)像其他普通數(shù)據(jù)庫(kù)一樣规个,附加到當(dāng)前的連接中凤薛,如:
ATTACH DATABASE ':memory:' AS aux1;
二、臨時(shí)數(shù)據(jù)庫(kù):
在調(diào)用sqlite3_open()函數(shù)或執(zhí)行ATTACH命令時(shí)诞仓,如果數(shù)據(jù)庫(kù)文件參數(shù)傳的是空字符串缤苫,那么一個(gè)新的臨時(shí)文件將被創(chuàng)建作為臨時(shí)數(shù)據(jù)庫(kù)的底層文件,如:
rc = sqlite3_open("", &db);
或
ATTACH DATABASE '' AS aux2;
和內(nèi)存數(shù)據(jù)庫(kù)非常相似墅拭,兩個(gè)數(shù)據(jù)庫(kù)連接創(chuàng)建的臨時(shí)數(shù)據(jù)庫(kù)也是各自獨(dú)立的活玲,在連接關(guān)閉后,臨時(shí)數(shù)據(jù)庫(kù)將自動(dòng)消失谍婉,其底層文件也將被自動(dòng)刪除舒憾。
盡管磁盤文件被創(chuàng)建用于存儲(chǔ)臨時(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù)信息,但是實(shí)際上臨時(shí)數(shù)據(jù)庫(kù)也會(huì)和內(nèi)存數(shù)據(jù)庫(kù)一樣通常駐留在內(nèi)存中穗熬,唯一不同的是镀迂,當(dāng)臨時(shí)數(shù)據(jù)庫(kù)中數(shù)據(jù)量過(guò)大時(shí),SQLite為了保證有更多的內(nèi)存可用于其它操作唤蔗,因此會(huì)將臨時(shí)數(shù)據(jù)庫(kù)中的部分?jǐn)?shù)據(jù)寫(xiě)到磁盤文件中探遵,而內(nèi)存數(shù)據(jù)庫(kù)則始終會(huì)將數(shù)據(jù)存放在內(nèi)存中窟赏。