## 第三節:indexedDB 對象
瀏覽器原生提供`indexedDB`對象,作為開發者的操作接口。
## 一、indexedDB.open()
`indexedDB.open()`方法用于打開數據庫。這是一個異步操作,但是會立刻返回一個 IDBOpenDBRequest 對象。
~~~
var openRequest = window.indexedDB.open('test', 1);
~~~
上面代碼表示,打開一個名為`test`、版本為`1`的數據庫。如果該數據庫不存在,則會新建該數據庫。
`open()`方法的第一個參數是數據庫名稱,格式為字符串,不可省略;第二個參數是數據庫版本,是一個大于`0`的正整數(`0`將報錯),如果該參數大于當前版本,會觸發數據庫升級。第二個參數可省略,如果數據庫已存在,將打開當前版本的數據庫;如果數據庫不存在,將創建該版本的數據庫,默認版本為`1`。
打開數據庫是異步操作,通過各種事件通知客戶端。下面是有可能觸發的4種事件。
* **success**:打開成功。
* **error**:打開失敗。
* **upgradeneeded**:第一次打開該數據庫,或者數據庫版本發生變化。
* **blocked**:上一次的數據庫連接還未關閉。
第一次打開數據庫時,會先觸發`upgradeneeded`事件,然后觸發`success`事件。
根據不同的需要,對上面4種事件監聽函數。
~~~
var openRequest = indexedDB.open('test', 1);
var db;
openRequest.onupgradeneeded = function (e) {
console.log('Upgrading...');
}
openRequest.onsuccess = function (e) {
console.log('Success!');
db = openRequest.result;
}
openRequest.onerror = function (e) {
console.log('Error');
console.log(e);
}
~~~
上面代碼有兩個地方需要注意。首先,`open()`方法返回的是一個對象(IDBOpenDBRequest),監聽函數就定義在這個對象上面。其次,`success`事件發生后,從`openRequest.result`屬性可以拿到已經打開的`IndexedDB`數據庫對象。
## 二、indexedDB.deleteDatabase()
`indexedDB.deleteDatabase()`方法用于刪除一個數據庫,參數為數據庫的名字。它會立刻返回一個`IDBOpenDBRequest`對象,然后對數據庫執行異步刪除。刪除操作的結果會通過事件通知,`IDBOpenDBRequest`對象可以監聽以下事件。
* `success`:刪除成功
* `error`:刪除報錯
~~~
var deleteRequest = window.indexedDB.deleteDatabase('demo');
deleteRequest.onerror = function (event) {
console.log('Error');
};
deleteRequest.onsuccess = function (event) {
console.log('success');
};
~~~
調用`deleteDatabase()`方法以后,當前數據庫的其他已經打開的連接都會接收到`versionchange`事件。
> 注意,刪除不存在的數據庫并不會報錯。
## 三、indexedDB.cmp()
`indexedDB.cmp()`方法比較兩個值是否為 indexedDB 的相同的主鍵。它返回一個整數,表示比較的結果:`0`表示相同,`1`表示第一個主鍵大于第二個主鍵,`-1`表示第一個主鍵小于第二個主鍵。
~~~
window.indexedDB.cmp(1, 2) // -1
~~~
注意,這個方法不能用來比較任意的 JavaScript 值。如果參數是布爾值或對象,它會報錯。
~~~
window.indexedDB.cmp(1, true) // 報錯
window.indexedDB.cmp({}, {}) // 報錯
~~~
- 第一章:音視頻
- 第一節:概述
- 第二節:媒體元素
- 第三節:視頻元素
- 第四節:音頻元素
- 第四節:事件
- 第二章:高德地圖
- 第三章:Storage 接口
- 第一節:概述
- 第二節:屬性和方法
- 第三節:事件
- 第四章:IndexedDB
- 第一節:概述
- 第二節:基本概念
- 第三節:indexedDB 對象
- 第四節:IDBRequest 對象
- 第五節:IDBDatabase 對象
- 第六節:IDBObjectStore 對象
- 第七節:IDBTransaction 對象
- 第八節:IDBIndex 對象
- 第九節:IDBCursor 對象
- 第十節:IDBKeyRange 對象
- 第十一節:操作流程
- 第五章:Canvas
- 第一節:概述
- 第二節:繪制圖像
- 第一課時:路徑
- 第二課時:線型
- 第三課時:矩形
- 第四課時:弧線
- 第五課時:文本
- 第六課時:漸變色和圖像填充
- 第七課時:陰影
- 第三節:圖像處理
- 第一課時:寫入圖像
- 第二課時:像素讀寫
- 第三課時:保存和恢復
- 第四課時:畫布
- 第五課時:圖像變換
- 第四節:元素方法
- 第一課時:toDataURL()
- 第二課時:toBlob()
- 第五節:使用實例
- 第一課時:動畫效果
- 第二課時:像素處理