2016-07-09 6 views
0

Ich führe gerade eine IndexedDB mit 3 ObjectStores und der folgenden--Funktion.IndexedDB vorhandene ObjectStore-Daten beim Upgrade beibehalten

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

Was ich jetzt tun möchte, ist einen vierten Objektspeicher hinzufügen. Das für ich die Version ändern und einen vierten Eintrag in onupgradeneeded hinzufügen.

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

    //same as above 

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

All das funktioniert gut, aber das Problem ist, sobald die onupgradeneeded die bereits vorhandenen ObjectStores verlieren ihre Daten alle aufgerufen wird.
Wie muss die onupgradeneeded aussehen, um die Daten der bereits vorhandenen ObjectStores zu behalten?

Antwort

3

indexedDB.open("DB_v3", 1) öffnet eine Datenbank mit dem Namen DB_v3 bei Version 1.

indexedDB.open("DB_v4", 1) eine Datenbank DB_v4 bei Version 1.

Datenbanken mit unterschiedlichen Namen sind völlig voneinander getrennt genannt wird geöffnet. Sie aktualisieren nicht, Sie erstellen nur zwei verschiedene Datenbanken. Wenn Sie eine vorhandene Datenbank aktualisieren möchten, behalten Sie den Namen bei und erhöhen Sie die Version. Dann sind die alten Daten noch da.

Verwandte Themen