无法创建第二个objectStore IndexedDB

时间:2014-10-20 19:33:46

标签: javascript jquery indexeddb

我基本上有这个代码用一个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. 

我错了什么?谢谢!

1 个答案:

答案 0 :(得分:2)

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