不知道我说的对不对。但据我所知,我无法手动创建版本更改交易。调用它的唯一方法是在打开索引数据库连接时更改版本号。如果这是正确的,在 example1 和 example2 中永远不会创建新的 objectStore?
例子1
function createObjectStore(name){
var request2 = indexedDB.open("existingDB");
request2.onupgradeneeded = function() {
var db = request2.result;
var store = db.createObjectStore(name);
};
}
例子2
function createObjectStore(name){
var request2 = indexedDB.open("existingDB");
request2.onsuccess = function() {
var db = request2.result;
var store = db.createObjectStore(name);
};
}
示例 3 - 这应该有效:
function createObjectStore(name){
var request2 = indexedDB.open("existingDB", 2);
request2.onupgradeneeded = function() {
var db = request2.result;
var store = db.createObjectStore(name);
};
}
如果我想在一个数据库中创建多个objectStore,我如何在打开数据库之前获取/获取数据库版本? 那么有没有办法自动化这个获取数据库版本号的过程呢??
除了使用 onupgradeneeded 事件处理程序之外,还有其他方法可以创建 objectStore。
请帮忙。非常感谢。
编辑:
这是我遇到的同样问题: https://groups.google.com/a/chromium.org/forum/#!topic/chromium-html5/0rfvwVdSlAs
最佳答案
您需要打开数据库以检查其当前版本,然后使用 version + 1
再次打开它以触发升级。
示例代码如下:
function CreateObjectStore(dbName, storeName) {
var request = indexedDB.open(dbName);
request.onsuccess = function (e){
var database = e.target.result;
var version = parseInt(database.version);
database.close();
var secondRequest = indexedDB.open(dbName, version+1);
secondRequest.onupgradeneeded = function (e) {
var database = e.target.result;
var objectStore = database.createObjectStore(storeName, {
keyPath: 'id'
});
};
secondRequest.onsuccess = function (e) {
e.target.result.close();
}
}
}
关于javascript - 如何在 IndexedDB 中创建多个对象存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20097662/