如何在IndexedDB中创建多个对象库

时间:2013-11-20 13:46:38

标签: indexeddb

我不知道我是对还是错。但据我所知,我无法手动创建版本更改事务。调用此方法的唯一方法是在打开索引数据库连接时更改版本号。如果这是正确的,在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

2 个答案:

答案 0 :(得分:15)

您需要打开数据库以检查其当前版本,然后使用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();
        }
    }
}

答案 1 :(得分:5)

创建对象存储的唯一方法是在onupgradeneeded事件中。您需要一个version_change事务才能更改架构。获取version_change事务的唯一方法是通过onupgradeneeded事件。

触发onupgradeneeded事件的唯一方法是以比当前版本的数据库更高的版本打开数据库。执行此操作的最佳方法是使用您需要使用的当前版本的数据库保持不变。每次需要更改数据库的架构时,都会增加此数字。然后在onupgradeneeded事件中,您可以检索当前版本的数据库。有了这个,您可以决定需要遵循哪个升级路径来获取最新的数据库架构。

我希望这能回答你的问题。