IDBDatabase
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Das IDBDatabase
-Interface der IndexedDB-API bietet eine Verbindung zu einer Datenbank; Sie können ein IDBDatabase
-Objekt verwenden, um eine Transaktion auf Ihrer Datenbank zu öffnen und dann Objekte (Daten) in dieser Datenbank zu erstellen, zu manipulieren und zu löschen. Die Schnittstelle bietet die einzige Möglichkeit, Versionen der Datenbank zu erhalten und zu verwalten.
Hinweis: Alles, was Sie in IndexedDB tun, geschieht immer im Kontext einer Transaktion, die Interaktionen mit den Daten in der Datenbank darstellt. Alle Objekte in IndexedDB — einschließlich Objektstores, Indizes und Cursor — sind an eine bestimmte Transaktion gebunden. Daher können Sie keine Befehle ausführen, Daten abrufen oder etwas außerhalb einer Transaktion öffnen.
Instanz-Eigenschaften
IDBDatabase.name
Nur lesbar-
Ein String, der den Namen der verbundenen Datenbank enthält.
IDBDatabase.version
Nur lesbar-
Ein 64-Bit-Integer, der die Version der verbundenen Datenbank enthält. Wenn eine Datenbank erstmals erstellt wird, ist dieses Attribut ein leerer String.
IDBDatabase.objectStoreNames
Nur lesbar-
Eine
DOMStringList
, die eine Liste der Namen der derzeit in der verbundenen Datenbank vorhandenen Objektstores enthält.
Instanz-Methoden
Erbt von: EventTarget
IDBDatabase.close()
-
Gibt sofort zurück und schließt die Verbindung zu einer Datenbank in einem separaten Thread.
IDBDatabase.createObjectStore()
-
Erstellt und gibt einen neuen Objektstore oder Index zurück.
IDBDatabase.deleteObjectStore()
-
Zerstört den Objektstore mit dem gegebenen Namen in der verbundenen Datenbank, zusammen mit allen Indizes, die ihn referenzieren.
IDBDatabase.transaction()
-
Gibt sofort ein Transaktionsobjekt (
IDBTransaction
) zurück, das die MethodeIDBTransaction.objectStore
enthält, die Sie verwenden können, um auf Ihren Objektstore zuzugreifen. Läuft in einem separaten Thread.
Ereignisse
Lauschen Sie auf diese Ereignisse mit addEventListener()
oder durch Zuweisen eines Ereignis-Listeners zur oneventname
-Eigenschaft dieses Interfaces.
close
-
Ein Ereignis, das ausgelöst wird, wenn die Datenbankverbindung unerwartet geschlossen wird.
versionchange
-
Ein Ereignis, das ausgelöst wird, wenn eine Strukturänderung der Datenbank angefordert wurde.
Die folgenden Ereignisse sind für IDBDatabase
über Ereignisweiterleitung von IDBTransaction
verfügbar:
IDBTransaction
abort
-
Ein Ereignis, das ausgelöst wird, wenn eine Transaktion abgebrochen wird.
IDBTransaction
error
-
Ein Ereignis, das ausgelöst wird, wenn eine Anforderung einen Fehler zurückgibt und das Ereignis zum Verbindungsobjekt hochblubbert.
Beispiel
Im folgenden Code-Snippet öffnen wir eine Datenbank asynchron (IDBFactory
), behandeln Erfolgs- und Fehlerszenarien und erstellen einen neuen Objektstore, falls ein Upgrade erforderlich ist (IDBDatabase
). Für ein vollständig funktionierendes Beispiel, siehe unsere To-do-Benachrichtigungen App (Beispiel live ansehen).
// Let us open our database
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
// these two event handlers act on the IDBDatabase object,
// when the database is opened successfully, or not
DBOpenRequest.onerror = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Error loading database.";
};
DBOpenRequest.onsuccess = (event) => {
node.appendChild(document.createElement("li")).textContent =
"Database initialized.";
// store the result of opening the database in the db
// variable. This is used a lot later on
db = DBOpenRequest.result;
// Run the displayData() function to populate the task
// list with all the to-do list data already in the IDB
displayData();
};
// This event handles the event whereby a new version of
// the database needs to be created Either one has not
// been created before, or a new version number has been
// submitted via the window.indexedDB.open line above
DBOpenRequest.onupgradeneeded = (event) => {
const db = event.target.result;
db.onerror = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Error loading database.";
};
// Create an objectStore for this database using
// IDBDatabase.createObjectStore
const objectStore = db.createObjectStore("toDoList", {
keyPath: "taskTitle",
});
// define what data items the objectStore will contain
objectStore.createIndex("hours", "hours", { unique: false });
objectStore.createIndex("minutes", "minutes", { unique: false });
objectStore.createIndex("day", "day", { unique: false });
objectStore.createIndex("month", "month", { unique: false });
objectStore.createIndex("year", "year", { unique: false });
objectStore.createIndex("notified", "notified", { unique: false });
note.appendChild(document.createElement("li")).textContent =
"Object store created.";
};
Diese nächste Zeile öffnet eine Transaktion auf der Datenbank und öffnet dann einen Objektstore, den wir dann manipulieren können, um die Daten darin zu verändern.
const objectStore = db
.transaction("toDoList", "readwrite")
.objectStore("toDoList");
Spezifikationen
Specification |
---|
Indexed Database API 3.0 # database-interface |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Verwendung von IndexedDB
- Verwendung von Transaktionen:
IDBTransaction
- Festlegen eines Bereichs von Schlüsseln:
IDBKeyRange
- Abrufen und Ändern Ihrer Daten:
IDBObjectStore
- Verwendung von Cursors:
IDBCursor
- Referenzbeispiel: To-do-Benachrichtigungen (Das Beispiel live ansehen).