2016-07-09 4 views
0

В настоящее время я запускаю IndexedDB с 3 объектными магазинами и следующую функцию onupgradeneeded.Держите IndexedDB существующие данные ObjectStore при обновлении

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-й объект-магазин. То, что я меняю версию и добавляю 4-ю запись в onupgradeneeded.

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 потерять все свои данные.
Как следует искать onupgradeneeded, чтобы сохранить данные уже существующих объектов?

ответ

3

indexedDB.open("DB_v3", 1) открывает базу данных с именем DB_v3 в версии 1.

indexedDB.open("DB_v4", 1) открывает базу данных с именем DB_v4 в версии 1.

Базы данных с разными названиями полностью разделены. Вы не обновляете, вы просто создаете две разные базы данных. Если вы хотите обновить существующую базу данных, сохраните ее имя и увеличьте ее. Тогда старые данные все равно будут там.

Смежные вопросы