成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

IndexedDB的JS接口設(shè)計(jì)詳解

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
IndexedDB 是HTML5中的一種數(shù)據(jù)存儲(chǔ)方式。用來(lái)幫助網(wǎng)站,在瀏覽器本地,存儲(chǔ)結(jié)構(gòu)比較復(fù)雜的數(shù)據(jù)。它和HTML5中其它的數(shù)據(jù)存儲(chǔ)方式有一些共性。本文將介紹IndexedDB(以下簡(jiǎn)稱IDB)的JS接口設(shè)計(jì)。

接下來(lái)介紹IndexedDB(以下簡(jiǎn)稱IDB)的JS接口設(shè)計(jì)

 

 

如圖所示,我們按照操作過(guò)程,把IDB的接口分成三部分來(lái)介紹:

1.初始化數(shù)據(jù)庫(kù)連接

2.在數(shù)據(jù)庫(kù)中建表

3.在表中存取數(shù)據(jù)

初始化數(shù)據(jù)庫(kù)連接

  1. var req = window.IndexedDB.open(dbName, dbVersion);  
  2. req.onsuccess = function (e) {...}  
  3. req.onupgradeneeded = function (e) {...}  
  4. req.onerror = function (e) {...} 

這里有兩個(gè)重要的參數(shù),dbName是數(shù)據(jù)庫(kù)的名稱,dbVersion是數(shù)據(jù)庫(kù)的“版本”。第2個(gè)參數(shù)“版本”可能不太好理解,IDB不允許數(shù)據(jù)庫(kù)中的表在同一個(gè)版本中發(fā)生變化,所以當(dāng)我們創(chuàng)建新表或刪除舊表的時(shí)候,必須使用一個(gè)不一樣的版本號(hào)。他的作用在于避免重復(fù)修改數(shù)據(jù)庫(kù)的表結(jié)構(gòu)。默認(rèn)的版本是空字符串"",我們?cè)谑褂脮r(shí),可以使用"1.0"。如果請(qǐng)求中的版本號(hào)和當(dāng)前數(shù)據(jù)庫(kù)的版本號(hào)相同,則會(huì)觸發(fā)onsuccess事件,如果版本號(hào)不同,則會(huì)觸發(fā)onupgradeneeded事件,我們?cè)谶@一事件中可以對(duì)數(shù)據(jù)庫(kù)的表結(jié)構(gòu)進(jìn)行修改,然后再觸發(fā)onsuccess事件。

在數(shù)據(jù)庫(kù)中建表

  1. req.onupgradeneeded = function (e) {  
  2.     var db = req.result;  
  3.     vardb.createObjectStore(storeName, optionParameters);  
  4. }; 

之前提到了,當(dāng)被訪問(wèn)的數(shù)據(jù)庫(kù)版本號(hào)需要發(fā)生改變時(shí),onupgradeneeded事件會(huì)被觸發(fā),我們就從這個(gè)事件繼續(xù)說(shuō)起。通過(guò)req.result我們可以得到當(dāng)前的數(shù)據(jù)庫(kù)對(duì)象db。db有一個(gè)方法createObjectStore,是專門用來(lái)創(chuàng)建表的。***個(gè)參數(shù)是表的名稱,第二個(gè)參數(shù)是可選的,它決定了我們要?jiǎng)?chuàng)建的表是內(nèi)聯(lián)關(guān)鍵字還是外部關(guān)鍵字,關(guān)鍵字是否需要自動(dòng)生成,代表這兩個(gè)設(shè)置的字段分別是keyPath和autoIncrement。比如,當(dāng)?shù)诙€(gè)參數(shù)是

  1. {keyPath: 'profile.id', autoIncrement: false} 

時(shí),說(shuō)明這個(gè)表采用內(nèi)聯(lián)關(guān)鍵字,且keyPath是profile.id,同時(shí)關(guān)鍵字不是自增的,需要每次插入數(shù)據(jù)時(shí)手動(dòng)設(shè)定;當(dāng)?shù)诙€(gè)參數(shù)是

  1. {autoIncrement: true} 

時(shí),說(shuō)明這個(gè)表采用外部關(guān)鍵字,并且關(guān)鍵字是自增的。

同樣的,我們可以在onupgradeneeded事件中刪除一個(gè)表,方法是db.deleteObjectStore(storeName)。道理很簡(jiǎn)單,就不展開(kāi)論述了。

在表中存取數(shù)據(jù)

  1. req.onsuccess = function (e) {  
  2.     var db = req.result;  
  3.     var transaction = db.transaction(storeNames, mode);  
  4.     var store = transaction.objectStore(storeName);  
  5.     var subReq = store.add(value, key);  
  6.     // var subReq = store.get(key);  
  7.     // var subReq = store.delete(key);  
  8.     // var subReq = store.clear();  
  9.     subReq.onsuccess = function (e) {  
  10.         console.log(subReq.result);  
  11.     };  
  12. }; 

對(duì)表中數(shù)據(jù)的存取通常是在onsuccess事件之后進(jìn)行的。同樣的,我們可以通過(guò)req.result獲取數(shù)據(jù)庫(kù)對(duì)象db,并隨時(shí)通過(guò)db進(jìn)行各種存取數(shù)據(jù)的操作。

上一篇文章提到了,所有的數(shù)據(jù)庫(kù)操作都是在事務(wù)(transaction)中進(jìn)行的,具體代碼格式是這樣的:

***句,先創(chuàng)建一個(gè)transaction,兩個(gè)參數(shù)分別是會(huì)涉及到的表的名字和讀寫模式,表的名字可以是數(shù)據(jù)也可以是字符串,如"users"或["users", "articles"],讀寫模式可以是IDBTransaction.READ_ONLY或IDBTransaction.READ_WRITE。

第二句,用transaction對(duì)象獲取一個(gè)表,需要傳入的參數(shù)是表的名稱。

第三句及其后面的四句注釋掉的代碼,分別是我們可以利用store這個(gè)對(duì)象進(jìn)行的基本的表操作——添加數(shù)據(jù)、獲取數(shù)據(jù)、刪除數(shù)據(jù)、清空表。參數(shù)也都很好理解,有一個(gè)要注意的地方是,添加數(shù)據(jù)時(shí),key是可選項(xiàng),如果我們已經(jīng)在表里定義了keyPath或表本身有自增關(guān)鍵字,則key是不需要寫的。

***,如***篇文章所說(shuō),這些操作是異步進(jìn)行的,想獲得操作的結(jié)果,可以在subReq.onsuccess事件中,通過(guò)訪問(wèn)subReq.result獲取操作結(jié)果。添加操作的操作結(jié)果是關(guān)鍵字,獲取數(shù)據(jù)的操作結(jié)果是對(duì)象的值,刪除操作和清空操作無(wú)需返回結(jié)果。

上述介紹是IDB的一些基本操作,我刻意省略掉了IDB中的遍歷、索引以及對(duì)各種出錯(cuò)異常的處理。為的是給大家一個(gè)直觀的印象,用了上面的接口,我們起碼可以做到一件事,就是想使用localStorage一樣通過(guò)鍵值對(duì)來(lái)存取json對(duì)象。

下一篇文章,會(huì)進(jìn)一步介紹遍歷操作,并結(jié)合firefox 10對(duì)IndexedDB的支持情況做一個(gè)簡(jiǎn)單的demo。

【系列文章】

  1. 淺析IndexedDB存數(shù)結(jié)構(gòu)
  2. 調(diào)試IndexedDB應(yīng)用程序

原文:http://bulaoge.net/topic.blg?dmn=g3g4&tid=2330716#Content

責(zé)任編輯:陳貽新 來(lái)源: 趙錦江的博客
相關(guān)推薦

2022-03-24 08:31:25

Web性能優(yōu)化瀏覽器緩存API封裝

2016-09-20 15:47:46

JavascriptIndexedDB瀏覽器

2012-02-23 15:36:51

IndexedDB

2012-02-15 13:26:56

IndexedDB

2012-02-15 14:21:01

IndexedDB

2013-01-14 12:53:13

Firefox OSIndexedDB

2015-02-12 17:48:54

微信SDK

2013-01-18 10:59:44

IBMdW

2009-10-30 16:32:19

無(wú)線接入網(wǎng)技術(shù)

2009-08-31 16:47:39

C#接口的定義

2021-02-28 20:53:37

Cookie存儲(chǔ)瀏覽器

2009-08-25 10:57:09

C#接口

2009-08-25 10:44:08

C#接口定義接口

2023-10-19 13:56:00

Vue項(xiàng)目Mock.js

2024-05-24 08:21:20

2009-11-04 14:54:51

.NET類

2022-04-04 16:53:56

Vue.js設(shè)計(jì)框架

2023-04-23 08:49:17

Java接口Future

2010-03-22 13:15:07

Python支付接口

2016-01-11 11:20:43

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产一区二区不卡 | 久久久久久黄 | 在线婷婷 | 97国产精品视频人人做人人爱 | 亚洲综合成人网 | 91看片在线观看 | 国产婷婷 | 看羞羞视频免费 | 91在线视频播放 | 久草成人| 亚洲最大的黄色网址 | 亚洲一区二区高清 | 毛片在线免费播放 | 久久久久99| 亚洲不卡在线观看 | 特黄毛片| 亚洲aⅴ| 成人精品一区二区三区中文字幕 | 欧美影院久久 | 伊人网站在线观看 | 国产一区二区三区日韩 | 国产在线不卡视频 | 色必久久 | 国产精品污污视频 | 久久久免费少妇高潮毛片 | 亚洲国产精品久久久久 | 国产精品久久 | 一级二级三级黄色 | a视频在线播放 | 亚洲精品欧美 | av激情影院| 天天玩天天操天天干 | 日韩一二三 | 日本久久久久久久久 | av在线天堂网 | 国产精品久久久久久久模特 | 狠狠综合久久av一区二区小说 | 在线日韩欧美 | 午夜亚洲 | 草草草久久久 | 日韩在线欧美 |