在升级时保留IndexedDB现有的ObjectStore数据

时间:2016-07-09 12:33:12

标签: javascript indexeddb

我目前正在运行带有3个ObjectStore和以下onupgradeneeded函数的IndexedDB。

var openRequest = indexedDB.open("DB_v3", 1);
openRequest.onupgradeneeded = function(e) { 
    var thisDB = e.target.result;
    if(!thisDB.objectStoreNames.contains("ObjectStore1")) {
        var objectStore = thisDB.createObjectStore("ObjectStore1", {autoIncrement:true});
        objectStore.createIndex("name", "name", {unique:true});
    }
    if(!thisDB.objectStoreNames.contains("ObjectStore2")) {
        //create objectstore & index as above
    }
    if(!thisDB.objectStoreNames.contains("ObjectStore3")) {
        //create objectstore & index as above
    }
}

我现在要做的是添加第4个ObjectStore。 我改变版本并在onupgradeneeded中添加第4个条目。

var openRequest = indexedDB.open("DB_v4", 1);
openRequest.onupgradeneeded = function(e) { 

    //same as above

    if(!thisDB.objectStoreNames.contains("ObjectStore4")) {
        //create objectstore & index as above
    }
}

所有这一切都运行正常,但问题是,只要调用onupgradeneeded,现有的ObjectStores就会丢失所有数据。
为了保留现有ObjectStore的数据,onupgradeneeded如何查看?

1 个答案:

答案 0 :(得分:4)

indexedDB.open("DB_v3", 1)在版本1打开名为DB_v3的数据库。

indexedDB.open("DB_v4", 1)在版本1打开名为DB_v4的数据库。

具有不同名称的数据库是完全独立的。你没有升级,你只是创建了两个不同的数据库。如果要升级现有数据库,请保持名称相同并增加版本。然后旧的数据仍然存在。