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