在indexedDB中调用onupgradewneed方法的时间和原因

When and why is the onupgradeneeded method called in indexedDB?

本文关键字:时间 方法 indexedDB 调用 onupgradewneed      更新时间:2023-09-26

我正在将IndexedDB用于测试项目。以下是一些示例代码:

var indexedDB = window.indexedDB || window.webkitIndexedDB 
                ||window.mozIndexedDB||window.msIndexedDB;
  var request = indexedDB.open("mydb",2),    
  customerData=[
    {ssn:"444-44-4444",name:"Bill",age:35,email:"bill@company.com"},      
    {ssn:"555-55-5555",name:"Donna",age:32,email:"donna@home.org"}
  ];
  request.onerror = function(event){
  };
  request.onupgradeneeded = function(event) {
     var objectStore = db.createObjectStore("customers",{keyPath:"ssn"});
     objectStore.createIndex("name","name",{unique:false});
     objectStore.createIndex("email","email",{unique:true});
     for(var i in customerData){
        objectStore.add(customerData[i]);
     }
  };
  request.onsuccess = function(e) {
  };

我真正不明白的是,当我的请求对象运行onupgradeneeded而不是onsuccess时(当然,假设没有错误)。是在不存在对象存储的情况下吗?或者当创建一个新的数据库版本时?

感谢

据此:https://developer.mozilla.org/en-US/docs/IndexedDB/Using_IndexedDB?redirectlocale=en-美国&redirectslug=IndexedB%2FIndexedDB_primer您已经有了正确的答案:

当您更改数据库版本时会调用onupgradeneeded:从无数据库到第一个版本,从第一个版本到第二个版本。。。

每次发出新请求时都会调用onsuccess:即使数据库模式没有更改。