您好,登錄后才能下訂單哦!
這篇文章主要介紹了indexedDB存儲的案例,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>indexedDB(瀏覽器本地存儲數據庫)</title> </head> <body> <p>IndexedDB 就是瀏覽器提供的本地數據庫,它可以被網頁腳本創建和操作。</p> <p>IndexedDB 允許儲存大量數據,提供查找接口,還能建立索引。</p> <h4>indexedDB特點</h4> <ol> <li>鍵值對存儲:采用對象倉庫存儲數據,所有的數據類型都可以直接存入,主鍵是獨一無二的</li> <li>異步:</li> <li>支持事務:IndexedDB 支持事務(transaction),這意味著一系列操作步驟之中,只要有一步失敗,整個事務就都取消,數據庫回滾到事務發生之前的狀態,不存在只改寫一部分數據的情況。</li> <li>同源限制: IndexedDB 受到同源限制,每一個數據庫對應創建它的域名。網頁只能訪問自身域名下的數據庫,而不能訪問跨域的數據庫。</li> </ol> <script> /** * databaseName:字符串,表示數據庫的名字,不存在則新建 * version :第二個參數是整數,表示數據庫的版本。默認為1 * 返回一個 IDBRequest 對象 對象通過三種事件error、success、upgradeneeded * * 新建數據庫與打開數據庫是同一個操作。如果指定的數據庫不存在,就會新建。不同之處在于,后續的操作主要在upgradeneeded事件的監聽函數里面完成 * * 新建數據步驟: * step1:新建對象倉庫(即新建表 * step2:新建索引 * * */ //IDBDatabase對象 let db; //創建或者打開 let request = window.indexedDB.open('newIDB'); //刪除數據庫 var DBDeleteRequest = window.indexedDB.deleteDatabase('newIDB'); DBDeleteRequest.onerror = function (event) { console.log('Error'); }; DBDeleteRequest.onsuccess = function (event) { console.log('success'); }; //error事件--表示打開數據失敗 request.onerror = function (event) { console.log('數據庫打開報錯'); db.close(); }; request.success = function (event) { //通過request對象的result屬性拿到數據庫對象 db = request.result; console.log(db); console.log('數據庫打開成功') }; console.log(request); //onupgradeneeded---如果指定的版本號,大于數據庫的實際版本號,就會發生數據庫升級事件 request.onupgradeneeded = function (event) { //通過事件對象的target.result屬性,拿到數據庫實例。 console.log(event); //request對象的result屬性上面,拿到一個IDBDatabase對象,它表示連接的數據庫 db = event.target.result; let objectStore; // 更好的寫發是判斷表是否存在 if (!db.objectStoreNames.contains('newIDB')) { /**新建數據 * 新建對象倉庫(即新建表) * 新增一張叫做person的表格,主鍵是id * */ //主鍵(key)是默認建立索引的屬性。如果沒有可以讓 IndexedDB 自動生成主鍵db.createObjectStore('person',{ autoIncrement: true }) objectStore = db.createObjectStore('newIDB', {keyPath: 'id'}); /** * 新建索引 * 三個參數分別為索引名稱、索引所在的屬性、配置對象(說明該屬性是否包含重復的值) * **/ objectStore.createIndex('name', 'name', {unique: false}); objectStore.createIndex('email', 'email', {unique: true}); } }; /**新增數據 * 新增數據指的是向對象倉庫寫入數據記錄。這需要通過事務完成。 * 寫入數據需要新建一個事務 * 新建時必須指定表格名稱和操作模式("只讀"或"讀寫") * 寫入操作是一個異步操作,通過監聽連接對象的success事件和error事件,了解是否寫入成功。 * **/ function add() { //通過IDBTransaction.objectStore(name)方法,拿到 IDBObjectStore 對象,再通過表格對象的add()方法,向表格寫入一條記錄。 var request = db.transaction(['newIDB'], 'readwrite') .objectStore('newIDB') .add({id: 1, name: '張三', age: 24, email: 'zhangsan@example.com'}); request.onsuccess = function (event) { console.log('數據寫入成功'); }; request.onerror = function (event) { console.log('數據寫入失敗'); } } setTimeout(function () { console.log(db); add(); }, 2000); /** 讀取數據 * *讀取數據也是通過事務完成。 * * * **/ function read() { //創建是務 let transaction = db.transaction(['newIDB']); //拿到 IDBObjectStore 對象 let objectStore = transaction.objectStore('newIDB'); //objectStore.get()方法用于讀取數據,參數是主鍵的值。 let request = objectStore.get(1); //失敗監聽 request.onerror = function (event) { console.log('事務失敗'); db.close() }; //成功監聽 request.onsuccess = function (event) { if (request.result) { console.log('Name: ' + request.result.name); console.log('Age: ' + request.result.age); console.log('Email: ' + request.result.email); } else { console.log('未獲得數據記錄'); } }; } setTimeout(function () { read(); }, 4000); /**遍歷數據 *遍歷數據表格的所有記錄,要使用指針對象 IDBCursor。 * * */ function readAll() { let objectStore = db.transaction('newIDB').objectStore('newIDB'); //新建指針對象的openCursor()方法是一個異步操作,所以要監聽success事件。 objectStore.openCursor().onsuccess = function (event) { let cursor = event.target.result; if (cursor) { console.log('Id: ' + cursor.key); console.log('Name: ' + cursor.value.name); console.log('Age: ' + cursor.value.age); console.log('Email: ' + cursor.value.email); cursor.continue(); } else { console.log('沒有更多數據了!'); } }; } setTimeout(function () { readAll(); }, 6000); /**跟新數據 *更新數據要使用IDBObject.put()方法。 * * */ function update() { //put()方法自動更新了主鍵為1的記錄。 let request = db.transaction(['newIDB'], 'readwrite') .objectStore('newIDB') .put({id: 1, name: '李四', age: 35, email: 'lisi@example.com'}); request.onsuccess = function (event) { console.log('數據更新成功'); }; request.onerror = function (event) { console.log('數據更新失敗'); db.close(); } } setTimeout(function () { update(); }, 8000); /**刪除數據 *IDBObjectStore.delete()方法用于刪除記錄 * * **/ function remove() { let request = db.transaction(['newIDB'], 'readwrite') .objectStore('newIDB') .delete(1); request.onsuccess = function (event) { console.log('數據刪除成功'); }; } // remove(); /**使用索引 * 索引的意義在于,可以讓你搜索任意字段,也就是說從任意字段拿到數據記錄。如果不建立索引,默認只能搜索主鍵(即從主鍵取值)。 * */ function search() { let request = db.transaction(['newIDB'], 'readonly') .objectStore('newIDB') .index('name') .get('李四'); request.onsuccess = function (e) { var result = e.target.result; if (result) { console.log('搜索成功') } else { console.log('搜索失敗') } } } // search(); </script> </body> </html> **注意:使用的時候鏈接數據庫,失敗或者完成其他操作關閉數據庫;**
感謝你能夠認真閱讀完這篇文章,希望小編分享indexedDB存儲的案例內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。