av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

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

接下來介紹IndexedDB(以下簡稱IDB)的JS接口設(shè)計(jì)

10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有呼倫貝爾免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

如圖所示,我們按照操作過程,把IDB的接口分成三部分來介紹:

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

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

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

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

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

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

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

之前提到了,當(dāng)被訪問的數(shù)據(jù)庫版本號(hào)需要發(fā)生改變時(shí),onupgradeneeded事件會(huì)被觸發(fā),我們就從這個(gè)事件繼續(xù)說起。通過req.result我們可以得到當(dāng)前的數(shù)據(jù)庫對(duì)象db。db有一個(gè)方法createObjectStore,是專門用來創(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í),說明這個(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í),說明這個(gè)表采用外部關(guān)鍵字,并且關(guān)鍵字是自增的。

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

在表中存取數(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)行的。同樣的,我們可以通過req.result獲取數(shù)據(jù)庫對(duì)象db,并隨時(shí)通過db進(jìn)行各種存取數(shù)據(jù)的操作。

上一篇文章提到了,所有的數(shù)據(jù)庫操作都是在事務(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是不需要寫的。

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

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

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

【系列文章】

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

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


分享標(biāo)題:IndexedDB的JS接口設(shè)計(jì)詳解
本文URL:http://uogjgqi.cn/article/dhohgij.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流