【问题标题】:When and why is the onupgradeneeded method called in indexedDB?何时以及为什么在 indexedDB 中调用 onupgradeneeded 方法?
【发布时间】:2012-08-21 10:17:48
【问题描述】:

我将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(当然假设没有错误)。是在没有对象存储的时候吗?或者在创建新的数据库版本时?

谢谢

【问题讨论】:

    标签: javascript html indexeddb


    【解决方案1】:

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

    onupgradeneeded在你改变数据库版本时被调用:从无数据库到第一个版本,第一个版本到第二个版本......

    onsuccess 在您每次发出新请求时都会被调用:即使数据库架构没有更改。

    【讨论】:

    • 好的,但是如果我不更改数据库版本,并且仍然想创建一个新的对象存储怎么办?那我应该在onsuccess中做吗?
    • 我不知道您是否熟悉其他数据库系统,但是您应该将对象存储视为表。所以如果你想创建一个新的,数据库模式就会改变。因此,您应该更改数据库的版本。因此,实现它的正确位置是 onupgradeneeded 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    相关资源
    最近更新 更多