IDBDatabase - 提供与 IndexedDB 数据库的连接
IDBDatabase
是 IndexedDB API 的接口,提供与数据库的连接;您可以使用 IDBDatabase
对象在数据库上打开事务,然后在该数据库中创建,操作和删除对象(数据)。该接口提供了获取和管理数据库版本的唯一方法。
注意:您在 IndexedDB 中执行的所有操作始终发生在事务的上下文中,事务表示与数据库中的数据的交互。 IndexedDB 中的所有对象(包括对象存储,索引和游标)都与特定事务相关联。因此,您无法在事务之外执行命令,访问数据或打开的任何内容。
属性
IDBDatabase.name
只读
一个 DOMString
,包含已连接数据库的名称。
IDBDatabase.version
只读
一个 64 位整数,包含已连接数据库的版本。首次创建数据库时,此属性为空字符串。
IDBDatabase.objectStoreNames
只读
一个 DOMStringList
,它包含当前在连接数据库中的对象库的名称列表。
方法
继承自:EventTarget
IDBDatabase.close()
立即返回并在单独的线程中关闭与数据库的连接。
IDBDatabase.createObjectStore()
创建并返回新的对象库或索引。
IDBDatabase.deleteObjectStore()
在连接的数据库中销毁具有给定名称的对象存储库以及引用它的任何索引。
IDBDatabase.transaction()
立即返回包含 IDBTransaction.objectStore
方法的事务对象(IDBTransaction
),您可以使用该方法访问对象库。在单独的线程中运行。
事件
使用 addEventListener()
或通过为此接口的 oneventname
属性分配事件监听器来监听这些事件:
abort
当事务中止并且冒泡到连接对象时触发。也可以通过 onabort
属性绑定。
close
在意外关闭数据库连接时触发。也可以通过 onclose
属性绑定。
error
当请求返回错误并且事件冒泡到连接对象时触发。也可以通过 onerror
属性绑定。
versionchange
在请求数据库结构更改时触发。也可以通过 onversionchange
属性获得。
实例
在下面的代码片段中,我们异步打开一个数据库(IDBFactory
),处理成功和错误的情况,并在需要升级的情况下创建一个新的对象存储(IDBdatabase
)。有关完整的工作实例,请参阅我们的待办事项通知应用程序(查看在线实例。)
// 让我们打开我们的数据库
var DBOpenRequest = window.indexedDB.open("toDoList", 4);
// 这两个事件处理程序用于当数据库成功/失败打开时,对 IDBDatabase 进行操作
DBOpenRequest.onerror = function(event) {
note.innerHTML += '<li>加载数据库出错。</li>';
};
DBOpenRequest.onsuccess = function(event) {
note.innerHTML += '<li>数据库已初始化。</li>';
// 存储在 db 变量中打开数据库的结果。这在后续会多处使用。
db = DBOpenRequest.result;
// 执行 displayData() 函数,使用 IDB 中已有的所有待办事项列表数据填充任务列表
displayData();
};
// 当数据库需要创建新版本:以前未创建过该数据库,
// 或者是通过上面的 window.indexedDB.open 提交了新版本号时,
// 触发该事件处理程序
DBOpenRequest.onupgradeneeded = function(event) {
var db = event.target.result;
db.onerror = function(event) {
note.innerHTML += '<li>加载数据库出错。</li>';
};
// 使用 IDBDatabase.createObjectStore 为此数据库创建 objectStore
var objectStore = db.createObjectStore("toDoList", { keyPath: "taskTitle" });
// 定义 objectStore 将包含哪些数据项
objectStore.createIndex("hours", "hours", { unique: false });
objectStore.createIndex("minutes", "minutes", { unique: false });
objectStore.createIndex("day", "day", { unique: false });
objectStore.createIndex("month", "month", { unique: false });
objectStore.createIndex("year", "year", { unique: false });
objectStore.createIndex("notified", "notified", { unique: false });
note.innerHTML += '<li>对象库已创建。</li>';
};
下一行在数据库上打开一个事务,然后打开一个对象存储,然后我们可以操作其中的数据。
var objectStore = db.transaction('toDoList').objectStore('toDoList');
规范
规范 | 状态 | 备注 |
---|---|---|
Indexed Database API IDBDatabase 的定义 |
推荐 | 初始版本 |
Indexed Database API 2.0 IDBDatabase 的定义 |
编者的草案 | - |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 24 23 — 57 webkit | 支持 | 16 10 — 16 moz | 101 | 15 | 7 |
Available in workers | 支持 23 — 57 webkit | 支持 | 37 | 未知 | 支持 | 未知 |
name | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
objectStoreNames | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
onabort | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
onclose | 31 | 支持 | 50 | 未知 | 支持 | 10.1 |
onerror | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
onversionchange | 24 23 — 24 webkit | 未知 | 16 10 — 16 moz | 101 | 15 | 7 |
version | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
close | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
createObjectStore | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
deleteObjectStore | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
transaction | 24 23 — 24 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 24 23 — 57 webkit | 24 23 — 57 webkit | 未知 | 22 | 未知 | 22 | 8 |
Available in workers | 支持 23 — 57 webkit | 支持 23 — 57 webkit | 支持 | 37 | 未知 | 支持 | 未知 |
name | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
objectStoreNames | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
onabort | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
onclose | 支持 | 支持 | 支持 | 50 | 未知 | 支持 | 10.1 |
onerror | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
onversionchange | 支持 | 支持 | 未知 | 22 | 未知 | 22 | 8 |
version | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
close | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
createObjectStore | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
deleteObjectStore | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
transaction | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
1. 部分的
相关链接
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置一系列键:
IDBKeyRange
- 检索并更改数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考实例:To-do 通知 (在线查看实例。)