IndexedDB.open()開啟與新建資料庫

admin發表於2019-06-10

關於IndexedDB資料庫基本操作可以參閱IndexedDB 資料庫用法一章節。

本文將結合程式碼示例與圖示詳細介紹一下IndexedDB.open方法的應用。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
let IDBOpenDBRequest = indexedDB.open(name, version);

引數解析:

(1).name:必需,要開啟或者建立的資料庫名稱,一個字串。

(2).version:可選,資料庫的版本,一個整數。

雖然方法的使用方式比較簡單,但是涉及的知識點很多,下面將分步詳細介紹。

一.indexedDB屬於window物件:

indexedDB屬於window物件,所以可以將window物件省略。

簡單程式碼片段如下:

[JavaScript] 純文字檢視 複製程式碼
window.indexedDB.open("antzone", 1);
indexedDB.open("antzone", 1);

上述兩段程式碼的功能是相同的,都可以開啟或者建立名稱為"antzone"的資料庫。

二.開啟資料庫還是建立資料庫:

建立與開啟資料庫都是通過IndexedDB.open()方法實現。

(1).如果對應名稱的資料庫不存在,那麼將會建立並開啟資料庫。

(2).如果對應名稱的資料已經存在,那麼將開啟對應的資料庫。

程式碼例項如下:

indexedDB.open是一個類似於AJAX的非同步操作,返回一個IDBOpenDBRequest物件,並不是期望的資料庫。

然後再通過IDBOpenDBRequest物件的事件來監聽相關狀態:

(1).success:資料庫開啟成功。

(2).error:資料庫開啟失敗。

(3).upgradeneeded:第一次開啟或者建立資料庫,或者資料庫版本發生變化。

(4)blocked:上一次的資料庫連線還未關閉。

假設在此之前並不存在一個名為"antzone"的資料庫,那麼上述程式碼會建立並開啟對應資料庫。

程式碼分析如下:

(1).當前並無任何資料庫,執行上述程式碼之後可以建立名稱為"antzone"的資料庫:

a:3:{s:3:\"pic\";s:43:\"portal/201906/10/090919k7jelesxx21ce2x1.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到建立名為"antzone"的資料庫,版本為1。

如果看不到新建的資料庫,可以右鍵點選indexedDB,然後選擇重新整理選單即可出現。

首先會觸發upgradeneeded事件,新建資料庫可以認為版本是從無到有,然後再觸發success事件。

然後再看IndexedDB.open()方法返回值,控制檯截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201906/10/090937abizn0f2zsariia7.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

簡單分析如下:

(1).返回值是一個IDBOpenDBRequest物件。

(2).真正的資料庫物件是通過IDBOpenDBRequest物件的result屬性獲取。

三.關於資料庫版本問題:

通過方法的第二個引數規定新建或者開啟資料庫的版本。

第二個引數可以省略,規則如下:

(1).引數是整數,規定小數可能會出現一些問題,且會自動轉換為最接近的整數。

(2).如果新建資料庫,且省略此引數,那麼預設值為1,否則版本為規定值。

(3).如果開啟資料庫,切省略此引數,那麼值為當前版本,如果規定,則值必須大於等於當前版本。

(4).大於當前版本,則會觸發upgradeneeded事件。

(5).在同一時刻只會存在一個版本資料庫,且資料庫版本變動只能增加不能減少。

建立資料庫後,那麼首先任務就是建立物件倉庫,具體參閱IndexedDB 資料庫建立物件倉庫一章節。

相關文章