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 DBDeleteRequest = window.indexedDB.deleteDatabase('demo');
DBDeleteRequest.onerror = function (event) {
console.log('Error');
};
DBDeleteRequest.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({}, {}) // 报错