## 第三节: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()
- 第五节:使用实例
- 第一课时:动画效果
- 第二课时:像素处理