IDBDatabase - Web API 接口参考 编辑

IndexedDB 中的 IDBDatabase 接口提供一个到 数据库的连接; 你可以使用 IDBDatabase 对象在数据库中打开一个transaction , 然后进行操作或者删除数据库中的对象。这是唯一一个能够访问和管理数据库版本的接口。 

Note: 此特性在 Web Worker 中可用。

注意:在IndexedDB中所做的所有事情总是发生在事务的上下文中,表示与数据库中的数据的交互。IndexedDB中的所有对象——包括对象存储、索引和游标——都与特定事务绑定。因此,在事务之外您不能执行命令、访问数据或打开任何东西。

注意:请注意,从Firefox 40开始,IndexedDB事务具有宽松的持久性保证以提高性能(请参阅bug 1112702)以前在readwrite事务中IDBTransaction.oncomplete被触发只有当所有数据都保证已刷新到磁盘时。在Firefox 40+中,complete事件在操作系统被告知写入数据之后被触发,但可能在该数据实际上被刷新到磁盘之前。该complete因此,事件可以比以前更快地传递,但是,如果操作系统崩溃或者在将数据刷新到磁盘之前系统电源丢失,则整个事务将丢失的可能性很小。由于这种灾难性事件很少见,大多数消费者不应该进一步关注自己。如果由于某种原因必须确保持久性(例如,您要存储以后无法重新计算的关键数据),则可以complete通过使用实验(非标准)readwriteflush模式创建事务来强制事务在传递事件之前刷新到磁盘(请参阅IDBDatabase.transaction)。

方法

继承自: EventTarget

IDBDatabase.close()
在一个单独的线程中关闭数据库连接并立即返回。
IDBDatabase.createObjectStore()
创建并返回一个新的 object store 或者 index。
IDBDatabase.deleteObjectStore()
根据给定的名字,删除在当前连接的数据库中的 object store 和 相关的索引。 
IDBDatabase.transaction()
立即返回一个包含IDBTransaction.objectStore 方法的 transaction 对象。你可以用这个对象来操作object store。这个操作是在一个单独的线程中执行的。

属性

IDBDatabase.name 只读
DOMString类型,当前连接数据库名  。
IDBDatabase.version 只读
64-bit 整型数,当前连接数据库的版本 。当数据第一次被创建时,这个属性是一个空的字符串。 
IDBDatabase.objectStoreNames 只读
DOMStringList类型,当前连接连接数据库中所有的object store 名字列表。

Event handlers

IDBDatabase.onabort
在中断数据库访问时触发。
IDBDatabase.onerror
当访问数据库失败时触发。
IDBDatabase.onversionchange

当数据库结构发生更改时触发

(IDBOpenDBRequest.onupgradeneeded事件或在其他地方请求 IDBFactory.deleteDatabase 时(最可能在同一台计算机上的另一个窗口/选项卡中这与版本更改事务(请参阅参考资料IDBVersionChangeEvent)不同,但它是相关的。

示例

在下面的代码中, 异步打开了一个数据库连接 (IDBFactory), 并处理成功或者异常事件, 如果触发了upgrade事件就需要创建一个新的object store  (IDBdatabase)。如果想看完整的例子, 可以使用 To-do Notifications 应用(view example live.)


// 我们先打开一个数据库
  var DBOpenRequest = window.indexedDB.open("toDoList", 4);

  // 当数据库打开出错/成功时,以下两个事件处理程序将分别对IDBDatabase对象进行下一步操作
  DBOpenRequest.onerror = function(event) {
    note.innerHTML += '<li>Error loading database.</li>';
  };

  DBOpenRequest.onsuccess = function(event) {
    note.innerHTML += '<li>Database initialised.</li>';

    // 将打开数据库的结果存储在db变量中,该变量将在后面的代码中被频繁使用
    db = DBOpenRequest.result;

    // 运行displayData()方法,用IDB中已经存在的所有待办事项列表数据填充到任务列表中
    displayData();
  };

  // 当试图打开一个尚未被创建的数据库,或者试图连接一个数据库还没被创立的版本时,onupgradeneeded事件会被触发

  DBOpenRequest.onupgradeneeded = function(event) {
    var db = event.target.result;

    db.onerror = function(event) {
      note.innerHTML += '<li>Error loading database.</li>';
    };

    // 使用IDBDatabase.createObjectStore方法,可创建一个对象存储区

    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>Object store created.</li>';
  };

下一行打开数据库上的事务,然后打开一个对象存储,然后我们可以在其中操作数据。


    var objectStore = db.transaction('toDoList').objectStore('toDoList'); 

规范

SpecificationStatusComment
Indexed Database API 2.0
IDBDatabase
Recommendation 

浏览器兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
Basic support23webkit
24
10 moz
16.0 (16.0)
10, partial157.1
Available in workers(Yes)37.0 (37.0)?(Yes)?
FeatureAndroidFirefox Mobile (Gecko)Firefox OSIE PhoneOpera MobileSafari Mobile
Basic support4.422.0 (22.0)1.0.110228
Available in workers(Yes)37.0 (37.0)(Yes)?(Yes)?

Be careful in Chrome as it still implements the old specification along with the new one. Similarly it still has the prefixed webkitIndexedDB property even if the unprefixed indexedDB is present.

See also

 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:98 次

字数:13371

最后编辑:6年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文