pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

HTML5本地存儲(chǔ)之IndexedDB

IndexedDB 是一種低級API,用于客戶端存儲(chǔ)大量結(jié)構(gòu)化數(shù)據(jù)(包括, 文件/ blobs)。下面通過本文重點(diǎn)給大家介紹HTML5本地存儲(chǔ)之IndexedDB的相關(guān)知識,感興趣的朋友一起看看吧

IndexedDB 是一種低級API,用于客戶端存儲(chǔ)大量結(jié)構(gòu)化數(shù)據(jù)(包括, 文件/ blobs)。該API使用索引來實(shí)現(xiàn)對該數(shù)據(jù)的高性能搜索。

最近有一項(xiàng)業(yè)務(wù)需求,就是可以離線存儲(chǔ)數(shù)據(jù),等到有網(wǎng)絡(luò)信號的時(shí)候可以上傳表單和圖片。所以研究了一下HTML5的IndexedDB。

對于只存儲(chǔ)某些字段的需求來說,可以使用Local Storage和 Session Storage來完成。但是一旦存儲(chǔ)大量的數(shù)據(jù),Local Storage和 Session Storage就遠(yuǎn)遠(yuǎn)不能滿足需求了。這時(shí),IndexedDB的強(qiáng)大之處就會(huì)體現(xiàn)出來了。

1、創(chuàng)建或者打開數(shù)據(jù)庫

/* 對不同瀏覽器的indexedDB進(jìn)行兼容 */
const indexeddb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB;
/* 創(chuàng)建或連接數(shù)據(jù)庫 */
const request = indexeddb.open(name, version);  // name:數(shù)據(jù)庫名,version:數(shù)據(jù)庫版本號

因?yàn)閕ndexedDB在不同的瀏覽器上有兼容性,所以我們需要些一個(gè)兼容函數(shù)來兼容indexedDB。

2、連接到數(shù)據(jù)庫的回調(diào)函數(shù)

request.addEventListener('success', function(event){ 
    // 打開或創(chuàng)建數(shù)據(jù)庫成功
}, false);
request.addEventListener('error', function(event){ 
    // 打開或創(chuàng)建數(shù)據(jù)庫失敗
}, false);
request.addEventListener('upgradeneeded', function(event){ 
    // 更新數(shù)據(jù)庫時(shí)執(zhí)行
}, false);

在連接到數(shù)據(jù)庫后,request會(huì)監(jiān)聽三種狀態(tài):

  • success:打開或創(chuàng)建數(shù)據(jù)庫成功
  • error:打開或創(chuàng)建數(shù)據(jù)庫失敗
  • upgradeneeded:更新數(shù)據(jù)庫

upgradeneeded狀態(tài)是在indexedDB創(chuàng)建新的數(shù)據(jù)庫時(shí)和indexeddb.open(name, version) version(數(shù)據(jù)庫版本號)發(fā)生變化時(shí)才能監(jiān)聽到此狀態(tài)。當(dāng)版本號不發(fā)生變化時(shí),不會(huì)觸發(fā)此狀態(tài)。數(shù)據(jù)庫的ObjectStore的創(chuàng)建、刪除等都是在這個(gè)監(jiān)聽事件下執(zhí)行的。

3、創(chuàng)建、刪除ObjectStore

在indexedDB中,ObjectStore類似于數(shù)據(jù)庫的表。

request.addEventListener('upgradeneeded', function(event){ 
    // 創(chuàng)建數(shù)據(jù)庫實(shí)例
    const db = event.target.result;
    // 關(guān)閉數(shù)據(jù)庫
    db.close();
    // 判斷是否有ObjectStore
    db.objectStoreNames.contains(objectStoreName);
    // 刪除ObjectStore
    db.deleteObjectStore(objectStoreName);
}, false);

可以用如下方法創(chuàng)建一個(gè)ObjectStore

request.addEventListener('upgradeneeded', function(event){ 
    // 創(chuàng)建數(shù)據(jù)庫實(shí)例
    const db = event.target.result;
    // 判斷是否有ObjectStore
    if(!db.objectStoreNames.contains(objectStoreName)){
        const store = db.createObjectStore(objectStoreName, {
            keyPath: keyPath  // keyPath 作為ObjectStore的搜索關(guān)鍵字
        });
        // 為ObjectStore創(chuàng)造索引
        store.createIndex(name,    // 索引
                          index,   // 鍵值
                          {
                              unique: unique  // 索引是否唯一
                          });
    }
}, false);

4、數(shù)據(jù)的增刪改查

request.addEventListener('success', function(event){ 
    // 創(chuàng)建數(shù)據(jù)庫實(shí)例
    const db = event.target.result;
    // 查找一個(gè)ObjectStore
    db.transaction(objectStoreName, wa);
    // wa為'readwrite'時(shí),數(shù)據(jù)可以讀寫 
    // wa為'readonly'時(shí),數(shù)據(jù)只讀
    const store = transaction.objectStore(objectStoreName);
}, false);

數(shù)據(jù)庫的增刪改查:

// 添加數(shù)據(jù),當(dāng)關(guān)鍵字存在時(shí)數(shù)據(jù)不會(huì)添加
store.add(obj);
// 更新數(shù)據(jù),當(dāng)關(guān)鍵字存在時(shí)覆蓋數(shù)據(jù),不存在時(shí)會(huì)添加數(shù)據(jù)
store.put(obj);
// 刪除數(shù)據(jù),刪除指定的關(guān)鍵字對應(yīng)的數(shù)據(jù)
store.delete(value);
// 清除ObjectStore
store.clear();
// 查找數(shù)據(jù),根據(jù)關(guān)鍵字查找指定的數(shù)據(jù)
const g = store.get(value);
g.addEventListener('success', function(event){
    // 異步查找后的回調(diào)函數(shù)
}, false);

按索引查找數(shù)據(jù)

const index = store.index(indexName);
const cursor = index.openCursor(range);
cursor.addEventListener('success', function(event){
    const result = event.target.result;
    if(result){
        result.value       // 數(shù)據(jù)
        result.continue(); // 迭代,游標(biāo)下移
    }
}, false);

按索引的范圍查找數(shù)據(jù)

const index = store.index(indexName);
const cursor = index.openCursor(range);
/**
 * range為null時(shí),查找所有數(shù)據(jù)
 * range為指定值時(shí),查找索引滿足該條件的對應(yīng)的數(shù)據(jù)
 * range為IDBKeyRange對象時(shí),根據(jù)條件查找滿足條件的指定范圍的數(shù)據(jù)
 */
// 大于或大于等于 
range = IDBKeyRange.lowerBound(value, true)   // (value, +∞),>  value
range = IDBKeyRange.lowerBound(value, false)  // [value, +∞),>= value
// 小于或小于等于,isOpen:true,開區(qū)間;false,閉區(qū)間
range = IDBKeyRange.upperBound(value, isOpen)
// 大于或大于等于value1,小于或小于等于value2
IDBKeyRange.bound(value1, value2, isOpen1, isOpen2)

最后,自己封裝了一個(gè)indexedDB的庫,可以參考一下:duan602728596/IndexedDB

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了有關(guān)HTML5頁面在iPhoneX適配問題,需要的朋友可以參考下
本篇文章主要介紹了html5中canvas圖表實(shí)現(xiàn)柱狀圖的示例,本文使用canvas來實(shí)現(xiàn)一個(gè)圖表,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
Adobe公司出品的多媒體處理軟件產(chǎn)品線較多,涵蓋了音視頻編輯、圖像處理、平面設(shè)計(jì)、影視后期等領(lǐng)域。這篇文章主要介紹了Adobe Html5 Extension開發(fā)初體驗(yàn)圖文教程,非常不錯(cuò),需要的朋
這篇文章主要介紹了基于HTML5的WebGL經(jīng)典3D虛擬機(jī)房漫游動(dòng)畫,需要的朋友可以參考下
這篇文章主要介紹了html5實(shí)現(xiàn)移動(dòng)端適配完美寫法,需要的朋友可以參考下
本篇文章主要介紹了HTML5響應(yīng)式(自適應(yīng))網(wǎng)頁設(shè)計(jì)的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 3d打印服务,3d打印汽车,三维扫描,硅胶复模,手板,快速模具,深圳市精速三维打印科技有限公司 | 尚为传动-专业高精密蜗轮蜗杆,双导程蜗轮蜗杆,蜗轮蜗杆减速机,蜗杆减速机生产厂家 | 润滑油加盟_润滑油厂家_润滑油品牌-深圳市沃丹润滑科技有限公司 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | 早报网| 合肥地磅_合肥数控切割机_安徽地磅厂家_合肥世佳电工设备有限公司 | 上海办公室装修,办公楼装修设计,办公空间设计,企业展厅设计_写艺装饰公司 | 培训无忧网-教育培训咨询招生第三方平台 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | 并网柜,汇流箱,电控设备,中高低压开关柜,电气电力成套设备,PLC控制设备订制厂家,江苏昌伟业新能源科技有限公司 | MOOG伺服阀维修,ATOS比例流量阀维修,伺服阀维修-上海纽顿液压设备有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | 元拓建材集团官方网站| 选矿设备,选矿生产线,选矿工艺,选矿技术-昆明昆重矿山机械 | 闪蒸干燥机-喷雾干燥机-带式干燥机-桨叶干燥机-[常州佳一干燥设备] | 博医通医疗器械互联网供应链服务平台_博医通 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 深圳活动策划公司|庆典策划|专业公关活动策划|深圳艺典文化传媒 重庆中专|职高|技校招生-重庆中专招生网 | 电子海图系统-电梯检验系统-智慧供热系统开发-商品房预售资金监管系统 | 行吊_电动单梁起重机_双梁起重机_合肥起重机_厂家_合肥市神雕起重机械有限公司 | 东莞市超赞电子科技有限公司 全系列直插/贴片铝电解电容,电解电容,电容器 | 模切之家-专注服务模切行业的B2B平台! | 企业微信scrm管理系统_客户关系管理平台_私域流量运营工具_CRM、ERP、OA软件-腾辉网络 | 智能家居全屋智能系统多少钱一套-小米全套价格、装修方案 | 电解抛光加工_不锈钢电解抛光_常州安谱金属制品有限公司 | 全温恒温摇床-水浴气浴恒温摇床-光照恒温培养摇床-常州金坛精达仪器制造有限公司 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 广东风淋室_广东风淋室厂家_广东风淋室价格_广州开源_传递窗_FFU-广州开源净化科技有限公司 | 石磨面粉机|石磨面粉机械|石磨面粉机组|石磨面粉成套设备-河南成立粮油机械有限公司 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 精密光学实验平台-红外粉末压片机模具-天津博君 | 火锅加盟_四川成都火锅店加盟_中国火锅连锁品牌十强_朝天门火锅【官网】 | 便携式XPDM露点仪-在线式防爆露点仪-增强型烟气分析仪-约克仪器 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 移动厕所租赁|移动卫生间|上海移动厕所租赁-家瑞租赁 | 建筑消防设施检测系统检测箱-电梯**检测仪器箱-北京宇成伟业科技有限责任公司 | 长沙网站建设制作「网站优化推广」-网页设计公司-速马科技官网 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 挨踢网-大家的导航!| 南京雕塑制作厂家-不锈钢雕塑制作-玻璃钢雕塑制作-先登雕塑厂 | 内六角扳手「厂家」-温州市威豪五金工具有限公司 |