2014-10-20 69 views
1

我基本上有这样的代码来生成一个对象存储一个新的数据库:无法创建第二个对象存储IndexedDB的

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)} 
} 

然后我试图添加第二个对象存储与命令:

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. 

我该怎么做?谢谢!

回答

2

在开发过程中,您可能已经将new_app增加到版本2.在上面的代码中将其升级到版本3,它将起作用。如果不是,请添加openRequest.onblocked处理程序,并将console.log行添加到所有事件处理程序中,以查看哪个处理程序正在启动。