Zoeken…


Opmerkingen

transacties

Transacties moeten onmiddellijk worden gebruikt nadat ze zijn gemaakt. Als ze niet worden gebruikt in de huidige gebeurtenislus (in principe voordat we wachten op zoiets als een webverzoek), gaan ze in een inactieve status waar u ze niet kunt gebruiken.

Databases kunnen slechts één transactie per keer naar een bepaald objectarchief schrijven. Dus je kunt zo veel als je dat gelezen uit onze wil things op te slaan, maar slechts één kan veranderingen op een gegeven moment te maken.

Testen op geïndexeerde DB beschikbaarheid

U kunt testen op IndexedDB-ondersteuning in de huidige omgeving door te controleren op de aanwezigheid van de eigenschap window.indexedDB :

if (window.indexedDB) {
    // IndexedDB is available
}

Een database openen

Het openen van een database is een asynchrone bewerking. We moeten een verzoek verzenden om onze database te openen en vervolgens luisteren naar evenementen, zodat we weten wanneer deze gereed is.

We openen een DemoDB-database. Als het nog niet bestaat, wordt het gemaakt wanneer we het verzoek verzenden.

De 2 hieronder zegt dat we om versie 2 van onze database vragen. Er is altijd maar één versie beschikbaar, maar we kunnen het versienummer gebruiken om oude gegevens te upgraden, zoals u zult zien.

var db = null, // We'll use this once we have our database
    request = window.indexedDB.open("DemoDB", 2);

// Listen for success. This will be called after onupgradeneeded runs, if it does at all
request.onsuccess = function() {
    db = request.result; // We have a database!

    doThingsWithDB(db);
};

// If our database didn't exist before, or it was an older version than what we requested,
// the `onupgradeneeded` event will be fired.
// 
// We can use this to setup a new database and upgrade an old one with new data stores
request.onupgradeneeded = function(event) {
    db = request.result;

    // If the oldVersion is less than 1, then the database didn't exist. Let's set it up
    if (event.oldVersion < 1) {
        // We'll create a new "things" store with `autoIncrement`ing keys
        var store = db.createObjectStore("things", { autoIncrement: true });
    }

    // In version 2 of our database, we added a new index by the name of each thing
    if (event.oldVersion < 2) {
        // Let's load the things store and create an index
        var store = request.transaction.objectStore("things");

        store.createIndex("by_name", "name");
    }
};

// Handle any errors
request.onerror = function() {
    console.error("Something went wrong when we tried to request the database!");
};

Objecten toevoegen

Alles wat moet gebeuren met gegevens in een IndexedDB-database gebeurt in een transactie. Er zijn een paar dingen die u moet weten over transacties die worden vermeld in het gedeelte Opmerkingen onderaan deze pagina.

We gebruiken de database die we hebben ingesteld in Een database openen.

// Create a new readwrite (since we want to change things) transaction for the things store
var transaction = db.transaction(["things"], "readwrite");

// Transactions use events, just like database open requests. Let's listen for success
transaction.oncomplete = function() {
    console.log("All done!");
};

// And make sure we handle errors
transaction.onerror = function() {
    console.log("Something went wrong with our transaction: ", transaction.error);
};

// Now that our event handlers are set up, let's get our things store and add some objects!
var store = transaction.objectStore("things");


// Transactions can do a few things at a time. Let's start with a simple insertion
var request = store.add({
    // "things" uses auto-incrementing keys, so we don't need one, but we can set it anyway
    key: "coffee_cup",
    name: "Coffee Cup",
    contents: ["coffee", "cream"]
});

// Let's listen so we can see if everything went well
request.onsuccess = function(event) {
    // Done! Here, `request.result` will be the object's key, "coffee_cup"
};


// We can also add a bunch of things from an array. We'll use auto-generated keys
var thingsToAdd = [{ name: "Example object" }, { value: "I don't have a name" }];

// Let's use more compact code this time and ignore the results of our insertions
thingsToAdd.forEach(e => store.add(e));

Het ophalen van gegevens

Alles wat moet gebeuren met gegevens in een IndexedDB-database gebeurt in een transactie. Er zijn een paar dingen die u moet weten over transacties die worden vermeld in het gedeelte Opmerkingen onderaan deze pagina.

We zullen de database gebruiken die we hebben opgezet in Een database openen.

// Create a new transaction, we'll use the default "readonly" mode and the things store
var transaction = db.transaction(["things"]);

// Transactions use events, just like database open requests. Let's listen for success
transaction.oncomplete = function() {
    console.log("All done!");
};

// And make sure we handle errors
transaction.onerror = function() {
    console.log("Something went wrong with our transaction: ", transaction.error);
};

// Now that everything is set up, let's get our things store and load some objects!
var store = transaction.objectStore("things");


// We'll load the coffee_cup object we added in Adding objects
var request = store.get("coffee_cup");

// Let's listen so we can see if everything went well
request.onsuccess = function(event) {
    // All done, let's log our object to the console
    console.log(request.result);
};


// That was pretty long for a basic retrieval. If we just want to get just
// the one object and don't care about errors, we can shorten things a lot
db.transaction("things").objectStore("things")
    .get("coffee_cup").onsuccess = e => console.log(e.target.result);


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow