摘要:網上搜來一堆,,幾乎沒有找到滿意的答案,經過匯總并結合自己的理解,封裝了一套簡單的是一個異步對象,必須使用回調函數方式進行調用打開一個數據庫,支持兩個參數,第二個參數指定版本號,我沒用到,讓瀏覽器自己創建版本號。
網上搜來一堆api,demo,幾乎沒有找到滿意的答案,經過匯總并結合自己的理解,封裝了一套簡單的api
// indexedDB是一個異步對象,必須使用回調函數方式進行調用 //打開一個數據庫,open支持兩個參數,第二個參數指定版本號,我沒用到,讓瀏覽器自己創建版本號。 var request = indexedDB.open("myDbName"); request.onsuccess = function(e) { //拿到db對象 var db = e.target.result; //新增一個數據表:給數據表指定一個搜索的鍵值 var store = db.createObjectStore("myTableName", {keyPath: "mykey"}); // 創建數據庫事務(不是很理解事務二字),我理解的是:指定一個即將用來讀寫的數據 //除了新建數據表都用這一行代碼 和上面的createObjectStore不能同時使用 var transaction = db.transaction("myTableName", "readwrite").objectStore("myTableName"); //到此,就可以進行數據庫的數據表操作了 //以下四個方法不是同時使用的,是分別封裝在不同方法內的,這里為了演示,全部寫一起了 //增:增加一條數據 add(anything) //一般情況下不用add,而是用put方法 var result = store.add({name:"mykey",value:"test1"}); //刪:刪除一條數據 delete(keyPath) var result = store.delete("mykey"); //改:修改一條數據,一般情況下put使用比較多 var result = store.put({name:"mykey",value:"test value"}); //查:讀取一條數據 var result = store.get("mykey"); result.onsuccess = function(e) { //如果是get,這里就是讀取的數據 var obj = e.target.result; success(obj); }; result.onerror = function(e) { }; } request.onerror = function() { };
以下是我自己封裝好的方法:
var myDb = { options:{ dbName:"myDbName", tbName:"myTableName", keyPath:"name", }, getIndexedDB: function(name) { var that = this; return new Promise(function(success, error) { // 打開數據庫 var request = indexedDB.open(that.options.dbName); request.onsuccess = function(e) { var database = e.target.result; // 操作數據表 var store = database.transaction(that.options.tbName, "readwrite").objectStore(that.options.tbName); var result = store.get(name); result.onsuccess = function(e) { var obj = e.target.result; success(obj); }; result.onerror = function(e) { error(obj); }; } request.onerror = function() { error(event); }; // 數據庫不存在時,或者版本號不一致時,就會執行這里 request.onupgradeneeded = function(e) { e.target.result.createObjectStore(that.options.tbName, { keyPath: that.options.keyPath }); }; }); }, getIndexedDBAll: function() { var that = this; return new Promise(function(success, error) { // 打開數據庫 var request = indexedDB.open(that.options.dbName); request.onsuccess = function(e) { var database = e.target.result; // 操作數據表 var store = database.transaction(that.options.tbName, "readwrite").objectStore(that.options.tbName); var cursorRequest = store.openCursor(); var list = []; cursorRequest.onsuccess = function(event) { var cursor = event.target.result; if (cursor) { var value = cursor.value; list.push(value); cursor.continue(); } else { success(list); } } } request.onerror = function() { error(event); }; // 數據庫不存在時,或者版本號不一致時,就會執行這里 request.onupgradeneeded = function(e) { e.target.result.createObjectStore(that.options.tbName, { keyPath: that.options.keyPath }); }; }); }, saveOneIndexedDB: function(keyValue) { var that = this; return new Promise(function(success, error) { // 打開數據庫 var request = indexedDB.open(that.options.dbName); request.onsuccess = function(e) { var database = e.target.result; var store = null; store = database.transaction(that.options.tbName, "readwrite").objectStore(that.options.tbName); var result = store.put(keyValue); result.onsuccess = function(event) { success(keyValue); }; result.onerror = function(event) { error(event); }; } request.onerror = function(event) { error(event) }; // 數據庫不存在時,或者版本號不一致時,就會執行這里 request.onupgradeneeded = function(e) { var store = e.target.result.createObjectStore(that.options.tbName, { keyPath: that.options.keyPath }); var result = store.put(keyValue); result.onsuccess = function(event) { success(keyValue); }; result.onerror = function(event) { error(event); }; }; }); }, saveListIndexedDB: function(list, back, error) { var that = this; return Promise.all(list.map(function(v) { return that.saveOneIndexedDB(v); })); }, deleteDB: function(name) { var that = this; return new Promise(function(success, error) { // 打開數據庫 var request = indexedDB.open(that.options.dbName); request.onsuccess = function(e) { var database = e.target.result; var store = database.transaction(that.options.tbName, "readwrite").objectStore(that.options.tbName); var result = store.delete(name); result.onsuccess = function(event) { success(name) }; result.onerror = function(event) { error(event) }; } request.onerror = function(event) { error(event) } // 數據庫不存在時,或者版本號不一致時,就會執行這里 request.onupgradeneeded = function(e) { e.target.result.createObjectStore(that.options.tbName, { keyPath: that.options.keyPath }); }; }); } };
測試一下:
//設置數據庫名稱和表名 myDb.options.dbName = "file_list"; myDb.options.tbName = "files"; //保存一條數據: myDb.saveOneIndexedDB({ name:"test", file:"123123", }).then(function(file){ /**file:{ name:"test", file:"123123", }*/ }); //讀取數據 myDb.getIndexedDB("ex_zh.js").then(function(v){console.log(v)});
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97954.html
摘要:是對標準的第五次修訂。新特性語義特性賦予網頁更好的意義和結構文件類型聲明僅有一型。新的屬性用于與用于用于。索引數據庫從本質上說,允許用戶在瀏覽器中保存大量的數據。 HTML5 是對 HTML 標準的第五次修訂。其主要的目標是將互聯網語義化,以便更好地被人類和機器閱讀,并同時提供更好地支持各種媒體的嵌入。HTML5 的語法是向后兼容的?,F在國內普遍說的 H5 是包括了 CSS3,Java...
摘要:是對標準的第五次修訂。新特性語義特性賦予網頁更好的意義和結構文件類型聲明僅有一型。新的屬性用于與用于用于。索引數據庫從本質上說,允許用戶在瀏覽器中保存大量的數據。 HTML5 是對 HTML 標準的第五次修訂。其主要的目標是將互聯網語義化,以便更好地被人類和機器閱讀,并同時提供更好地支持各種媒體的嵌入。HTML5 的語法是向后兼容的。現在國內普遍說的 H5 是包括了 CSS3,Java...
摘要:是對標準的第五次修訂。新特性語義特性賦予網頁更好的意義和結構文件類型聲明僅有一型。新的屬性用于與用于用于。索引數據庫從本質上說,允許用戶在瀏覽器中保存大量的數據。 HTML5 是對 HTML 標準的第五次修訂。其主要的目標是將互聯網語義化,以便更好地被人類和機器閱讀,并同時提供更好地支持各種媒體的嵌入。HTML5 的語法是向后兼容的?,F在國內普遍說的 H5 是包括了 CSS3,Java...
摘要:相比更加高效,包括索引事務處理和查詢功能。在本地存儲中,存儲的數據是最多的,不像的,存儲空間是無上限且永久的。由于受到的推崇。存儲數據如果調用添加的數據與已存在的數據有相同的,瀏覽器會將新數據替換已存在的數據。 什么是IndexedDB indexedDB是一種輕量級NOSQL數據庫,是由瀏覽器自帶。相比Web Sql更加高效,包括索引、事務處理和查詢功能。在HTML5本地存儲中,In...
閱讀 3511·2021-11-18 10:02
閱讀 946·2021-09-04 16:48
閱讀 2034·2019-08-30 15:55
閱讀 3533·2019-08-30 15:52
閱讀 1810·2019-08-30 14:08
閱讀 3552·2019-08-30 13:19
閱讀 1137·2019-08-27 10:53
閱讀 3116·2019-08-26 12:11