【问题标题】:Cannot create second objectStore IndexedDB无法创建第二个 objectStore IndexedDB
【发布时间】:2014-12-15 21:34:28
【问题描述】:

我基本上有这个代码来生成一个带有一个 objectStore 的新数据库:

DB.open_or_create({table: 'photos', key: 'url'});

以及主要代码:

var DB = {
 open_or_create : function(p){
    var openRequest = indexedDB.open("new_app",1);
    openRequest.onupgradeneeded = function(e) {
        var thisDB = e.target.result;
        if(!thisDB.objectStoreNames.contains(p.table)) {
            thisDB.createObjectStore(p.table,{ keyPath: p.key });
        }
    }
    openRequest.onsuccess = function(e) {DBTABLES = e.target.result}
    openRequest.onerror = function(e) {console.log(e)}
 }

然后我尝试使用命令添加第二个 objectStore:

  DB.open_or_create2({table: 'users',key: 'id'});

而且基本相同的代码只有另一个数据库版本号:

open_or_create2 : function(p){
    var openRequest = indexedDB.open("new_app",2);
    openRequest.onupgradeneeded = function(e) {
        var thisDB = e.target.result;
        if(!thisDB.objectStoreNames.contains(p.table)) {
            if(p.key){
                thisDB.createObjectStore(p.table,{ keyPath: p.key });
            }else{
                thisDB.createObjectStore(p.table)
            }
        }
    }
    openRequest.onsuccess = function(e) {DBTABLES = e.target.result}
    openRequest.onerror = function(e) {console.log(e)}
}

但正如我在控制台中看到的,只创建了第一个表!此外,当我尝试将数据添加到患者表时,我收到此错误:

Uncaught NotFoundError: Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not found. 

我做错了什么?谢谢!

【问题讨论】:

    标签: javascript jquery indexeddb


    【解决方案1】:

    在开发过程中,您可能已经将 new_app 增加到第 2 版。在上面的代码中将其升级到第 3 版,它就可以工作了。如果没有,请添加一个openRequest.onblocked 处理程序并将console.log 行添加到所有事件处理程序,以查看哪个被触发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 2021-11-08
      相关资源
      最近更新 更多