為了實現(xiàn)離線存儲功能,HTML5提供了Web存儲相關(guān)的API,即WebStorage。WebStorage包括LocalStorage和SessionStorage兩部分,可用于對離線數(shù)據(jù)的短暫性或永久性存儲。另外,HTML5另外還提供了一套基于關(guān)系型的數(shù)據(jù)庫WebSQLDatabase,可以支持頁面上復(fù)雜數(shù)據(jù)的離線存儲,例如可以存儲用戶電子郵件信息、消費賬務(wù)流水信息等,同時WebSQLDatabase還加入了傳統(tǒng)數(shù)據(jù)庫的事務(wù)概念,使得多窗口操作可以保持?jǐn)?shù)據(jù)一致性。
WebSQLDatabase數(shù)據(jù)庫是基于SQLite開發(fā)的,與WebStorage中的LocalStorage相同。最后一個也是最為強大的功能即IndexedDB。IndexedDB是HTML5推出的一種輕量級的NoSQL數(shù)據(jù)庫,即常說的非關(guān)系型數(shù)據(jù)庫。與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫相比,NoSQL數(shù)據(jù)庫具有易擴展、快速讀寫、成本低廉等特點,HTML5的IndexedDB同時還包含了常見的數(shù)據(jù)庫構(gòu)造,如事務(wù)、索引、游標(biāo)等,在API的使用上分為同步和異步兩種形態(tài)。下面通過一個簡單的示例介紹IndexedDB的使用,代碼如下:
【代碼5-1】
01 <! DOCTYPE html> 02 < html> 03 < body></ body> 04 < script type=" text/ javascript"> 05 var request = indexedDB. open(' Html5IndexedDB', 2); // 創(chuàng)建 一個 數(shù)據(jù)庫 06 request. onerror = function( e) { console. log( e); }; // 監(jiān)聽 錯誤 事件 07 request. onupgradeneeded = function( event) { //
監(jiān)聽 事務(wù) 事件 08 var db = event. target. result; // 獲取 數(shù)據(jù)庫 對象 09 var objectStore = db. createObjectStore(" users", { keyPath: "html5" }); // 創(chuàng)建 對象 存儲 空間 存放 用戶 信息 10 objectStore. createIndex(" name", "name", { unique: false }); // 創(chuàng)建 索引 來 通過 name 搜索 客戶 11 objectStore. createIndex(" id", "id", { unique: true }); // 創(chuàng)建 索引 來 通過 email 搜索 客戶 12 objectStore. add({ html5:' 1' ,name : ' 小 王 ' , sex :' 女 ', id:' 3323' ,age: 23}); // 存入 一條 用戶 信息 數(shù)據(jù) 13 }; 14 </ script> 15 </ html>