SQLite 第三版主要主要介紹關(guān)于類庫的一些變化, 包括:
這篇文檔簡易的介紹了SQlite3.0版針對于2.8版的一些改進,適用于對SQlite2.8版比較了解的用戶。
在可預(yù)見的未來,錯誤修正這項功能將繼續(xù)支持SQLite 2.8版。為了保證這兩個版本可以共存,在3.0版本中,一些主要文件的名稱和API的名稱中都加了個”3“。例如, c程序內(nèi)含文件的名稱已經(jīng)從"sqlite.h"改為"sqlite3.h".還有,用來和數(shù)據(jù)庫一起操作的數(shù)據(jù)命令解釋程序也從 "sqlite.exe" 改為 "sqlite3.exe"。有了這些命名上的區(qū)別,SQLite 2.8版和SQLite 3.0版就可以同時安裝在同一個系統(tǒng)下了。另外,名稱上的區(qū)別也使同一個C程序可以同時和2.8,3.0兩個版本同時相連并使用同一個類庫。
SQlite的數(shù)據(jù)庫文件格式已被完全更新, 2.1版的格式和3.0版的格式是互不兼容的。比如,2.8版的SQLite 是無法讀取3.0版的SQlite數(shù)據(jù)庫文件的,同樣,3.0版的SQLite也是無法讀取2.8版的 SQlite數(shù)據(jù)庫文件的。
如想把SQLite 2.8版的數(shù)據(jù)庫轉(zhuǎn)換成3.0版的數(shù)據(jù)庫的話,你可以用一些現(xiàn)成的命令行操作,比如輸入下面的命令:
sqlite OLD.DB .dump | sqlite3 NEW.DB
新的數(shù)據(jù)庫文件格式使用B 樹型數(shù)據(jù)表格。在B 樹中,所有的數(shù)據(jù)都被存儲在(數(shù)據(jù)結(jié)構(gòu)中)樹結(jié)構(gòu)端結(jié)點,而不是既在(數(shù)據(jù)結(jié)構(gòu)中)樹結(jié)構(gòu)端結(jié)點又 在樹的分支節(jié)點。B 樹型數(shù)據(jù)表格具有很好的測量性,并且可以存儲比較大的數(shù)據(jù)組。此外,傳統(tǒng)的B-樹也仍被應(yīng)用在SQlite3.0的許多目錄中。
新的文件格式可以存儲的可變頁的長度在512和32768字節(jié)之間。每頁的文件長度都可以在頁眉顯示出來,所以從理論上來說,同一個類庫可以讀取不同長度的數(shù)據(jù)庫,但實際上這一點還沒有完全實現(xiàn)。
新的文件格式在磁盤映像中省略了沒有被應(yīng)用的區(qū)域。例如,目錄僅僅顯示B-樹所存儲的主要部分而不是顯示所有的數(shù)據(jù)。也就是說,記錄數(shù)據(jù)長度的區(qū)域 被省略了。整數(shù)值,比如說關(guān)鍵字的長度和關(guān)鍵數(shù)據(jù)可以用變長量來編譯,這樣一來,最常見的數(shù)據(jù)就可以只用一兩個字節(jié)來顯示了,還有,如果需要的話,最高 64字節(jié)的數(shù)據(jù)信息也是可以編譯的。 在3.0版中,整數(shù)和浮動的點數(shù)據(jù)是用二進制來記錄的,但在2.0版中,它們則是被轉(zhuǎn)換成ASCII碼的。所以,同一個數(shù)據(jù)庫文件,如果是記錄在 SQlite3.0中,就可以比記錄在SQlite2.8中少占用25%至30%的磁盤空間。
關(guān)于 SQLite3.0版所采用的B-樹的文件格式具體細(xì)節(jié),你可以點擊 btree.c 看標(biāo)題注釋。
SQLite2.8在數(shù)據(jù)庫內(nèi)部可以用不同的文件格式處理文件,但是,如果想把信息寫到硬盤或是通過API和其它數(shù)據(jù)相連,所有文件格式都必須被轉(zhuǎn) 換成ASCII文本格式。SQLite 3.0則不同,它可以把數(shù)據(jù)可內(nèi)部的主要數(shù)據(jù),也就是上文所提到的用變長量所表示的數(shù)據(jù)顯示給用戶,并在適當(dāng)?shù)臅r候用二進制的形式在磁盤中顯示。為了支持 BLOB,非ASCII格式的數(shù)據(jù)也可以在磁盤中顯示。
SQLite 2.8版有一個特點,就是任何類型的數(shù)據(jù)都可以存儲在任意的數(shù)據(jù)列中,不受數(shù)據(jù)列所要求存儲的文件類型的限制。這個特性被保留在3.0版中并有所改進。雖 然數(shù)據(jù)文件的格式?jīng)Q定了文件的類型,每列所存儲的文件都要有規(guī)定的屬性,但在3.0中每個列都是可以存儲不同類型的數(shù)據(jù)的。當(dāng)數(shù)據(jù)被存入一個數(shù)據(jù)列的時 候,這個列將盡全力把存入的數(shù)據(jù)的文件格式轉(zhuǎn)換成該列所要求的文件格式。所有的SQL數(shù)據(jù)庫引擎都是這樣的。所不同的是,SQLite 3.0 將存儲數(shù)據(jù)即使轉(zhuǎn)換該數(shù)據(jù)的文件類型是不可能的。
例如,一個數(shù)據(jù)列要求所存儲的文件的類型是 "INTEGER",你輸入一個字符串,這個列將自動檢查所輸入的字符串是否是數(shù)字,如果它確實看起來像是數(shù)字,字符串將被轉(zhuǎn)換成數(shù)字,然后,如果這個數(shù) 字沒有分?jǐn)?shù)部分的話,它將被轉(zhuǎn)換成整數(shù)存儲起來。但是如果這個字符串不是一個規(guī)則的數(shù)字的話,它將仍被保存為一個字符串。如果一個列要求所存儲的文件的類 型是"TEXT"的話,在存儲數(shù)據(jù)之前,列將嘗試把數(shù)字轉(zhuǎn)換成 ASCII-Text來表示數(shù)據(jù)。但是,BLOBS在文本列仍然被保存成BLOBS,因為在通常情況下你是不可能把BLOB轉(zhuǎn)換成文本的。
新聞熱點
疑難解答
圖片精選