2021-03-31

IndexedDB(結(jié)構(gòu)化)

nosql類(lèi)型的數(shù)據(jù)存儲(chǔ)方式

不需要寫(xiě)sql語(yǔ)句

定義

IndexedDB 是一種底層 API,用于在客戶(hù)端存儲(chǔ)大量的結(jié)構(gòu)化數(shù)據(jù)

應(yīng)用場(chǎng)景

客戶(hù)端(瀏覽器)

大量的數(shù)據(jù)

結(jié)構(gòu)化數(shù)據(jù)(類(lèi)似 object對(duì)象 有鍵有值)

不是關(guān)系型(通過(guò)sql查詢(xún))

存儲(chǔ)位置

瀏覽器中

application中

底層API

操作起來(lái)相對(duì)復(fù)雜

可選擇第三方工具

IndexedDB API是強(qiáng)大的,但對(duì)于簡(jiǎn)單的情況可能看起來(lái)太復(fù)雜。如果你更喜歡一個(gè)簡(jiǎn)單的API,請(qǐng)嘗試? localForage、dexie.js、PouchDB、idb、idb-keyval、JsStore 或者 lovefield? 之類(lèi)的庫(kù),這些庫(kù)使 IndexedDB 對(duì)開(kāi)發(fā)者來(lái)說(shuō)更加友好。

同源策略

正如大多數(shù)的 web 儲(chǔ)存解決方案一樣,IndexedDB 也遵守同源策略。因此當(dāng)你在某個(gè)域名下操作儲(chǔ)存數(shù)據(jù)的時(shí)候,你不能操作其他域名下的數(shù)據(jù)

事務(wù)型數(shù)據(jù)庫(kù)系統(tǒng)(ORM)

所有操作 都是通過(guò)事務(wù)對(duì)象(transaction)進(jìn)行操作

使用

1.打開(kāi)數(shù)據(jù)庫(kù) -> IDBRequest(請(qǐng)求對(duì)象)

open

IDBFactory.open 方法用于打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接。本方法立即返回一個(gè) IDBOpenDBRequest 對(duì)象,但打開(kāi)數(shù)據(jù)庫(kù)的操作是異步執(zhí)行的

連接數(shù)據(jù)庫(kù)在一個(gè)單獨(dú)的線(xiàn)程中進(jìn)行,包括以下幾個(gè)步驟

指定數(shù)據(jù)庫(kù)已經(jīng)存在時(shí):

等待 versionchange 操作完成。

如果數(shù)據(jù)庫(kù)已計(jì)劃刪除,那等著刪除完成。

如果已有數(shù)據(jù)庫(kù)版本高于給定的 version,中止操作并返回類(lèi)型為 VersionError 的 DOMError 。

如果已有數(shù)據(jù)庫(kù)版本低于給定的 version,觸發(fā)一個(gè) versionchange 操作。

如果數(shù)據(jù)庫(kù)不存在,創(chuàng)建指定名稱(chēng)的數(shù)據(jù)庫(kù),將版本號(hào)設(shè)置為給定版本,如果給定版本號(hào),則設(shè)置為1,and no object stores.

創(chuàng)建數(shù)據(jù)庫(kù)連接。

2.獲得數(shù)據(jù)庫(kù)對(duì)象

監(jiān)聽(tīng)事件獲得(注意 打開(kāi)數(shù)據(jù)庫(kù)是異步)

IDBRequest->result屬性 數(shù)據(jù)庫(kù)對(duì)象

upgradeneeded

檢測(cè)到有新版本的時(shí)候觸發(fā)

第一次打開(kāi)數(shù)據(jù)庫(kù)(如果沒(méi)有數(shù)據(jù)庫(kù)->新建數(shù)據(jù)庫(kù)(也可以有多個(gè)數(shù)據(jù)庫(kù)))

建ObjectStore(DB.createObjectStore("user",{keyPath:"有唯一值的index"});)

建index(os.createIndex("鍵名","鍵路徑",可選項(xiàng));)

建index

建index

建ObjectStore(note)

建index(title)

建index(createTime)

建index(content)

success

每一次打開(kāi)都會(huì)調(diào)用

error

3.通過(guò)數(shù)據(jù)庫(kù)對(duì)象獲得事務(wù)對(duì)象(db.tansaction())

增刪改查

1.獲取事務(wù)對(duì)象

指定權(quán)限

2.獲取你要操作的OS(objecctStore)

3.增刪改查

添加數(shù)據(jù)add()

? ? ? ? let ts = DB.transaction(["hero"],"readwrite");

? ? ? ? let os = ts.objectStore("hero");

? ? ? ? //會(huì)返回一個(gè)IDBRequest

? ? ? ? let request = os.add(data);

? ? ? ? request.onsuccess = ()=>{

? ? ? ? ? ? console.log("添加數(shù)據(jù)成功")

? ? ? ? ? ? loadAll();

? ? ? ? }

? ? ? ? request.onerror = err=>{console.warn(err)}

查詢(xún)數(shù)據(jù)

getAll 查詢(xún)所有數(shù)據(jù)(ie不支持)

? ? ? ? let os = DB.transaction(["hero"],"readwrite").objectStore("hero");

? ? ? ? let request = os.getAll();

? ? ? ? request.onsuccess = function (){

? ? ? ? ? ? console.log(this.result);

? ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • IndexedDB(結(jié)構(gòu)化) nosql類(lèi)型的數(shù)據(jù)存儲(chǔ)方式 不需要寫(xiě)sql語(yǔ)句 定義 IndexedDB 是一種底...
    青冘1114閱讀 249評(píng)論 0 0
  • IndexedDB(結(jié)構(gòu)化) nosql類(lèi)型的數(shù)據(jù)存儲(chǔ)方式 不需要寫(xiě)sql語(yǔ)句 定義 IndexedDB 是一種底...
    Rikka丶閱讀 273評(píng)論 0 0
  • 通過(guò)數(shù)據(jù)庫(kù)對(duì)象獲得事務(wù)對(duì)象(db.tansaction()) 增刪改查 1.獲取事務(wù)對(duì)象 指定權(quán)限 2.獲...
    舊時(shí)夢(mèng)_d22e閱讀 82評(píng)論 0 1
  • nosql類(lèi)型的數(shù)據(jù)存儲(chǔ)方式 不需要寫(xiě)sql語(yǔ)句 定義 IndexedDB 是一種底層 API,用于在客戶(hù)端存儲(chǔ)大...
    言術(shù)閱讀 486評(píng)論 0 0
  • IndexedDB(結(jié)構(gòu)化) nosql類(lèi)型的數(shù)據(jù)存儲(chǔ)方式 不需要寫(xiě)sql語(yǔ)句 定義 IndexedDB 是一種底...
    云囍閱讀 1,950評(píng)論 0 0

友情鏈接更多精彩內(nèi)容