2017-03-03 32 views
0

我有兩個問題: 1.我想當我更新我的數據庫版本清除所有數據。更新版本時如何清除來自indexedDB的所有數據?

objectStore.clear(); 

,但我有錯誤: main1.js:42未捕獲ConstraintError:無法執行對「IDBDatabase」 createObjectStore「:具有指定名稱的對象存儲已經存在。

  1. 更新版本DB如何僅向我的Db添加新項目?

    var browserDatabase = {};

    browserDatabase._db = null; 
    browserDatabase._dbVersion = 4; 
    browserDatabase._dbName = "mediaStorageDB"; 
    browserDatabase._storeName = "myStore"; 
    var idb = window.indexedDB 
    
    var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction; 
    var IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange; 
    
    var dbName='nameDb'; 
    
    if (!window.indexedDB) { 
        // window.alert("Ваш браузер не поддерживат стабильную версию IndexedDB. Такие-то функции будут недоступны"); 
    } 
    var request = window.indexedDB.open("MyTestDatabase", 7); 
    
    
    request.onupgradeneeded = function(e) { 
    
        console.log(e.oldVersion) 
    
        db = event.target.result; 
        //console.log(db) 
        // Создаем хранилище объектов для этой базы данных 
        // var objectStore = db.createObjectStore("name", { keyPath: "myKey" }) 
        const customerData = [ 
         { ssn: "444-44-4444", name: "Bill", age: 35, email: "[email protected]" }, 
         { ssn: "555-55-5555", name: "Donna", age: 32, email: "[email protected]" } 
        ]; 
    
    
    
        var objectStore = db.createObjectStore("customers", { keyPath: "ssn" }); 
    
        // Create an index to search customers by name. We may have duplicates 
        // so we can't use a unique index. 
        objectStore.createIndex("name", "name", { unique: false }); 
    
        // Create an index to search customers by email. We want to ensure that 
        // no two customers have the same email, so use a unique index. 
        objectStore.createIndex("email", "email", { unique: true }); 
    
    
        objectStore.clear(); //clear previous version 
    
    
    
        // Store values in the newly created objectStore. 
        for (var i in customerData) { 
         objectStore.add(customerData[i]); 
        } 
    
        if (e.oldVersion < 1) { 
         // create v1 schema 
        } 
        if (e.oldVersion < 2) { 
         // upgrade v1 to v2 schema 
        } 
        if (e.oldVersion < 3) { 
         // upgrade v2 to v3 schema 
        } 
        // ... 
    }; 
    request.onerror = function(event) { 
        // Сделать что-то при ошибке request.errorCode! 
        console.log('error'); 
        console.log(event); 
    }; 
    request.onsuccess = function(event) { 
        // Выполнить какой-то код если запрос успешный request.result! 
        console.log('success'); 
    
        db = event.target.result; 
        console.log(db); 
    
        var transaction = db.transaction(["customers"], "readwrite"); 
    
    
        const customerData = [ 
         { ssn: "888-44-4444", name: "Sasga", age: 35, email: "[email protected]" }, 
         { ssn: "99-55-5555", name: "Andrii", age: 32, email: "[email protected]" } 
        ]; 
        var objectStore = transaction.objectStore("customers"); 
        for (var i in customerData) { 
         var request = objectStore.add(customerData[i]); 
         request.onsuccess = function(event) { 
          // event.target.result == customerData[i].ssn; 
         }; 
        } 
    
    
        transaction.oncomplete = function(event) { 
         console.log("All done!"); 
        }; 
    
        transaction.onerror = function(event) { 
         // Don't forget to handle errors! 
        }; 
    
    
    }; 
    

回答

1

clear將在商店中刪除所有數據。

deleteObjectStore將刪除該商店。

由於商店已經存在並且您正在嘗試創建該商店,因此您會收到錯誤消息。如果您希望能夠運行create,則必須先運行deleteObjectStore

然而,這可能不是你想要做的。在版本更改中,您通常不想刪除對象存儲庫,索引和數據。你只是想更新它們。

相關問題