IDBDatabase

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

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.

EventTarget IDBDatabase

Instanz-Eigenschaften

IDBDatabase.name Schreibgeschützt

Ein String, der den Namen der verbundenen Datenbank enthält.

IDBDatabase.version Schreibgeschützt

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 Schreibgeschützt

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 Methode IDBTransaction.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).

js
// 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.

js
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