如何在另一个页面上重新打开现有的indexedDB数据库

时间:2015-10-08 14:49:56

标签: indexeddb indexeddbshim

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

1 个答案:

答案 0 :(得分:3)

IDB版本号

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

此处,DB_VERSION是数据库的版本号,用于确定是否将打开数据库以进行创建,修改或读取。

进一步阅读:

IDB版本号如何工作

  • 当您致电open第一次,您通常会将版本号调用为1,这将触发onupgradeneeded事件处理程序(可以使用此事件处理程序) to"创建"数据库模式)和onsuccess事件处理程序(此事件处理程序将用于保存数据库处理程序)按顺序,然后您可以使用数据库处理程序访问数据库。
  • 下次您可以使用升级/更高版本号致电open,然后再次onupgradeneeded事件处理程序(此事件处理程序可用于"创建& #34;数据库模式)和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');
    };