2

我创建了包含多个表和数据的 indexedDB 数据库。现在我想重新打开现有的 indexedDB 数据库并想从特定表中读取数据。请帮助我

4

1 回答 1

3

IDB 版本号

在 IndexedDB 中,通常使用以下方式打开数据库(第一次打开或重新打开以进行修改)window.indexedDB.open(DB_NAME, DB_VERSION);

这里,DB_VERSION是数据库的版本号,它决定了数据库是否会被打开以进行创建、修改或读取。

进一步阅读:

IDB 版本号的工作原理

  • 一次调用时open,通常会调用版本号为 1,这将触发onupgradeneeded事件处理程序(此事件处理程序可用于“创建”数据库模式)和onsuccess事件处理程序(此事件处理程序将用于保存数据库handler) 顺序,然后您可以使用数据库处理程序访问数据库。
  • 下次您可以open使用升级/更高版本号调用时,将再次触发onupgradeneeded事件处理程序(此事件处理程序可用于“创建”数据库模式)和onsuccess事件处理程序(此事件处理程序将用于保存数据库处理程序)命令。
  • 下次您可以open使用相同的版本号调用(重新打开以读取)时,将再次onsuccess按顺序触发事件处理程序(此事件处理程序将用于保存数据库处理程序)。

请注意

  • onupgradeneeded事件处理程序用于创建或修改数据库模式。
  • onsuccess事件处理程序用于获取将用于访问数据库的数据库处理程序。
  • 重要提示:通常您不应该open一次又一次地调用(直到您希望修改数据库模式),但是当您第一次调用时,您应该使用onsuccess事件处理程序保存数据库处理程序,然后使用该数据库处理程序访问数据库。

用于理解的示例代码

在下面使用一次,然后查看警报,然后再次执行(浏览器上没有清除缓存,以便相同的数据库仍然存在),然后查看警报。

    var request = window.indexedDB.open("SO", 1);

    request.onblocked = function(event) {
        alert("Error, cannot open database. Error message: Database in blocked state. " +
                "Please close all open windows, clear browser cache and use a fresh window.");
    };

    //Callback for error upon DB open 
    request.onerror = function(event) {
      alert('Error, cannot open database/Erreur, ne peut pas ouvrir la base de données');
    };

    //Callback for success upon DB open
    request.onsuccess = function(event) {
        alert('onsuccess. Save your database handler, for example something, DB_HANDLER = event.target.result;');
    };

    //Callback for onupgradeneeded upon DB open
    request.onupgradeneeded = function(event) {
        alert('onupgradeneeded. Create/modify the database schema');
    };
于 2015-10-09T11:50:09.243 回答