IDBObjectStore: put() Methode
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die put() Methode der IDBObjectStore Schnittstelle aktualisiert einen gegebenen Datensatz in einer Datenbank oder fügt einen neuen Datensatz ein, wenn der gegebene Eintrag noch nicht existiert.
Sie gibt ein IDBRequest Objekt zurück und erstellt in einem separaten Thread einen strukturierten Klon des Wertes und speichert den geklonten Wert im Objekt-Store. Dies dient dazu, neue Datensätze hinzuzufügen oder bestehende Datensätze in einem Objekt-Store zu aktualisieren, wenn der Modus der Transaktion readwrite ist. Wenn der Datensatz erfolgreich gespeichert wird, wird ein Erfolgsevent auf dem zurückgegebenen Anfrageobjekt ausgelöst, wobei das result auf den Schlüssel des gespeicherten Datensatzes gesetzt wird und die transaction auf die Transaktion, in der dieser Objekt-Store geöffnet ist.
Die put-Methode ist eine Update- oder Einfügen-Methode. Siehe die IDBObjectStore.add Methode für eine Nur-Einfügen-Methode.
Beachten Sie, dass, wenn Sie einen IDBCursor auf den Datensatz haben, den Sie aktualisieren möchten, es vorzuziehen ist, ihn mit IDBCursor.update() zu aktualisieren, anstatt IDBObjectStore.put() zu verwenden. Auf diese Weise wird deutlich gemacht, dass ein bestehender Datensatz aktualisiert wird, anstatt einen neuen Datensatz einzufügen.
Syntax
put(item)
put(item, key)
Parameter
item-
Der Eintrag, den Sie aktualisieren (oder einfügen) möchten.
keyOptional-
Der Primärschlüssel des Datensatzes, den Sie aktualisieren möchten (z.B. von
IDBCursor.primaryKey).
Rückgabewert
Ein IDBRequest Objekt, auf dem nachfolgende Ereignisse bezogen auf diese Operation ausgelöst werden.
Wenn die Operation erfolgreich ist, ist der Wert der result-Eigenschaft der Anfrage der Schlüssel für den neuen oder aktualisierten Datensatz.
Ausnahmen
Diese Methode kann eine DOMException von einem der folgenden Typen auslösen:
ReadOnlyErrorDOMException-
Wird ausgelöst, wenn die mit dieser Operation verbundene Transaktion im schreibgeschützten Modus ist.
TransactionInactiveErrorDOMException-
Wird ausgelöst, wenn die Transaktion dieses
IDBObjectStoreinaktiv ist. DataErrorDOMException-
Wird ausgelöst, wenn einer der folgenden Bedingungen zutrifft:
- Der Objekt-Store verwendet In-line-Schlüssel oder hat einen Schlüsselgenerator, und ein
keyParameter wurde bereitgestellt. - Der Objekt-Store verwendet Out-of-line-Schlüssel und hat keinen Schlüsselgenerator, und kein
keyParameter wurde bereitgestellt. - Der Objekt-Store verwendet In-line-Schlüssel, aber keinen Schlüsselgenerator, und der Schlüsselpfad des Objekt-Stores ergibt keinen gültigen Schlüssel.
- Der
keyParameter wurde bereitgestellt, enthält aber keinen gültigen Schlüssel.
- Der Objekt-Store verwendet In-line-Schlüssel oder hat einen Schlüsselgenerator, und ein
InvalidStateErrorDOMException-
Wird ausgelöst, wenn das
IDBObjectStoregelöscht oder entfernt wurde. DataCloneErrorDOMException-
Wird ausgelöst, wenn die zu speichernden Daten nicht durch den internen strukturierten Klon-Algorithmus geklont werden konnten.
Beispiele
Das folgende Beispiel fordert einen bestimmten Datensatz an; wenn diese Anfrage erfolgreich ist, erhält die onsuccess Funktion den zugehörigen Datensatz vom IDBObjectStore (verfügbar als objectStoreTitleRequest.result), aktualisiert eine Eigenschaft des Datensatzes und legt dann den aktualisierten Datensatz in einer anderen Anfrage mit put() zurück in den Objekt-Store. Für ein vollständiges Arbeitsbeispiel siehe unsere To-do Notifications App (beispiel live ansehen).
const title = "Walk dog";
// Open up a transaction as usual
const objectStore = db
.transaction(["toDoList"], "readwrite")
.objectStore("toDoList");
// Get the to-do list object that has this title as its title
const objectStoreTitleRequest = objectStore.get(title);
objectStoreTitleRequest.onsuccess = () => {
// Grab the data object returned as the result
const data = objectStoreTitleRequest.result;
// Update the notified value in the object to "yes"
data.notified = "yes";
// Create another request that inserts the item back into the database
const updateTitleRequest = objectStore.put(data);
// Log the transaction that originated this request
console.log(
`The transaction that originated this request is ${updateTitleRequest.transaction}`,
);
// When this new request succeeds, run the displayData() function again to update the display
updateTitleRequest.onsuccess = () => {
displayData();
};
};
Spezifikationen
| Specification |
|---|
| Indexed Database API 3.0> # ref-for-dom-idbobjectstore-put①> |
Browser-Kompatibilität
Siehe auch
- Verwendung von IndexedDB
- Starten von Transaktionen:
IDBDatabase - Verwendung von Transaktionen:
IDBTransaction - Festlegen eines Schlüsselbereichs:
IDBKeyRange - Abrufen und Ändern Ihrer Daten:
IDBObjectStore - Verwenden von Cursors:
IDBCursor - Referenzbeispiel: To-do Notifications (Beispiel live ansehen).