在升级时保留 IndexedDB 现有的 ObjectStore 数据
Keep IndexedDB existing ObjectStore data on upgrade
我目前是 运行 具有 3 个 ObjectStores 和以下 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 就会丢失所有数据。
onupgradeneeded
需要如何查看才能保留现有 ObjectStores 的数据?
indexedDB.open("DB_v3", 1)
在版本 1 中打开名为 DB_v3 的数据库。
indexedDB.open("DB_v4", 1)
在版本 1 中打开名为 DB_v4 的数据库。
不同名称的数据库是完全分开的。你不是在升级,你只是在创建两个不同的数据库。如果要升级现有数据库,请保持名称不变并增加版本。那么旧的数据还在。
我目前是 运行 具有 3 个 ObjectStores 和以下 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
.
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
需要如何查看才能保留现有 ObjectStores 的数据?
indexedDB.open("DB_v3", 1)
在版本 1 中打开名为 DB_v3 的数据库。
indexedDB.open("DB_v4", 1)
在版本 1 中打开名为 DB_v4 的数据库。
不同名称的数据库是完全分开的。你不是在升级,你只是在创建两个不同的数据库。如果要升级现有数据库,请保持名称不变并增加版本。那么旧的数据还在。