IDBDatabase 对象有以下属性。
IDBDatabase.name
:字符串,数据库名称。IDBDatabase.version
:整数,数据库版本。数据库第一次创建时,该属性为空字符串。IDBDatabase.objectStoreNames
:DOMStringList 对象(字符串的集合),包含当前数据的所有 object store 的名字。IDBDatabase.onclose
:指定 close 事件(数据库意外关闭)的监听函数。IDBDatabase.onerror
:指定 error 事件(访问数据库失败)的监听函数。IDBDatabase.onversionchange
:数据库版本变化时触发(发生upgradeneeded
事件,或调用indexedDB.deleteDatabase()
)。
下面是objectStoreNames
属性的例子。该属性返回一个 DOMStringList 对象,包含了当前数据库所有对象仓库的名称(即表名),可以使用 DOMStringList 对象的contains
方法,检查数据库是否包含某个对象仓库。
if (!db.objectStoreNames.contains('firstOS')) {
上面代码先判断某个对象仓库是否存在,如果不存在就创建该对象仓库。
方法
IDBDatabase.close()
:关闭数据库连接,实际会等所有事务完成后再关闭。IDBDatabase.createObjectStore()
:创建存放数据的对象仓库,类似于传统关系型数据库的表格,返回一个 IDBObjectStore 对象。该方法只能在versionchange
事件监听函数中调用。IDBDatabase.deleteObjectStore()
:删除指定的对象仓库。该方法只能在versionchange
事件监听函数中调用。IDBDatabase.transaction()
:返回一个 IDBTransaction 事务对象。
下面是createObjectStore()
方法的例子。
上面代码创建了一个名为items
的对象仓库,如果该对象仓库已经存在,就会抛出一个错误。为了避免出错,需要用到下文的objectStoreNames
属性,检查已有哪些对象仓库。
createObjectStore()
方法还可以接受第二个对象参数,用来设置对象仓库的属性。
db.createObjectStore('test', { keyPath: 'email' });
下面是deleteObjectStore()
方法的例子。
下面是transaction()
方法的例子,该方法用于创建一个数据库事务,返回一个 IDBTransaction 对象。向数据库添加数据之前,必须先创建数据库事务。
var t = db.transaction(['items'], 'readwrite');
transaction()
方法接受两个参数:第一个参数是一个数组,里面是所涉及的对象仓库,通常是只有一个;第二个参数是一个表示操作类型的字符串。目前,操作类型只有两种:readonly
(只读)和readwrite
(读写)。添加数据使用readwrite
,读取数据使用readonly
。第二个参数是可选的,省略时默认为模式。