什么是IndexedDB:Web離線數據庫入門簡介及基礎教程
IndexedDB是什么
簡單來說IndexedDB是HTML5引入的一種可以在Web瀏覽器使用的數據庫,用來持久化大量 數據。它可以讓你的Web應用程序有非常強大的查詢能力,并且可以離線工作。IndexedDB的數據操作直接使用JS腳本,不依賴SQL語句(最初的 Web SQL數據庫己被廢棄),操作返回均采用異步。
下文來自: IndexedDB 規范
客戶端需要存儲大量局部對象,以便滿足Web應用程序對離線數據的要求。 [WEBSTORAGE]可以用來儲存鍵值對(key-value pair)。然而,它無法提供按順序檢索鍵,高性能地按值查詢,或存儲重復的一個鍵。
本規范提供了一些具體的API來實施高級鍵值數據庫,這是最復雜的查詢處理器的核心。它通過傳統數據庫來存儲密鑰和相應的值(每個鍵可以對應多個值),并提供通過確定的順序對值進行遍歷。通常用于插入或刪除的大量數據,以及持久化有序數據結構。
數據庫初始化和創建索引
當創建的library數據庫之前并不存在時,會調用onupgradeneeded接口,在這個函數中可以進行數據庫初始化和創建索引;
這里創建了一個名為"library"的數據庫及一個名為"books"的數據倉庫(ObjectStore相當于表),并填入了一些初始數據。
var db; var request = indexedDB.open("library");request.onupgradeneeded = function() { // 此數據庫此前不存在,進行初始化 var db = request.result; var store = db.createObjectStore("books", {keyPath: "isbn"}); var titleIndex = store.createIndex("by_title", "title", {unique: true}); var authorIndex = store.createIndex("by_author", "author");
// 填入初始值 store.put({title: "Quarry Memories", author: "Fred", isbn: 123456}); store.put({title: "Water Buffaloes", author: "Fred", isbn: 234567}); store.put({title: "Bedrock Nights", author: "Barney", isbn: 345678}); };
request.onsuccess = function() { db = request.result; };</pre>
數據存儲及事務的使用
下面的例子使用事務(transaction)來填入數據:
var tx = db.transaction("books", "readwrite"); var store = tx.objectStore("books");store.put({title: "Quarry Memories", author: "Fred", isbn: 123456}); store.put({title: "Water Buffaloes", author: "Fred", isbn: 234567}); store.put({title: "Bedrock Nights", author: "Barney", isbn: 345678});
tx.oncomplete = function() { // All requests have succeeded and the transaction has committed. };</pre>
數據查詢:索引
下面的例子使用索引來查詢其中的一本書。
var tx = db.transaction("books", "readonly"); var store = tx.objectStore("books"); var index = store.index("by_title");var request = index.get("Bedrock Nights"); request.onsuccess = function() { var matching = request.result; if (matching !== undefined) { // A match was found. console.log(matching.isbn, matching.title, matching.author); } else { // No match was found. console.log(null); } };</pre>
數據查詢:索引與游標(cursor)
下面的例子通過索引和游標來來枚舉查詢到的所有匹配的書
var tx = db.transaction("books", "readonly"); var store = tx.objectStore("books"); var index = store.index("by_author");var request = index.openCursor(IDBKeyRange.only("Fred")); request.onsuccess = function() { var cursor = request.result; if (cursor) { // Called for each matching record. console.log(cursor.value.isbn, cursor.value.title, cursor.value.author); cursor.continue(); } else { // No more matching records. console.log(null); } };</pre> 來自:http://ourjs.com/detail/5472db89bc3f9b154e000055