国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

html5 indexeddb的簡明api

luckyw / 1728人閱讀

摘要:網(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

相關(guān)文章

  • 前端進(jìn)階系列(三):HTML5新特性

    摘要:是對(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...

    spademan 評(píng)論0 收藏0
  • 前端進(jìn)階系列(三):HTML5新特性

    摘要:是對(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...

    luffyZh 評(píng)論0 收藏0
  • 前端進(jìn)階系列(三):HTML5新特性

    摘要:是對(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...

    lemon 評(píng)論0 收藏0
  • IndexedDB--HTML5本地存儲(chǔ)

    摘要:相比更加高效,包括索引事務(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...

    explorer_ddf 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<