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