IDBDatabase

Baseline Widely available

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

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 in Ihrer Datenbank zu eröffnen und dann Objekte (Daten) in dieser Datenbank zu erstellen, zu manipulieren und zu löschen. Das Interface 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 Daten in der Datenbank darstellt. Alle Objekte in IndexedDB — einschließlich Objekt-Speicher, Indizes und Cursor — sind an eine bestimmte Transaktion gebunden. Daher können Sie keine Befehle ausführen, auf Daten zugreifen oder irgendetwas 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 zuerst erstellt wird, ist dieses Attribut ein leerer String.

IDBDatabase.objectStoreNames Schreibgeschützt

Eine DOMStringList, die eine Liste der Namen der Objekt-Speicher enthält, die derzeit in der verbundenen Datenbank vorhanden sind.

Instanzmethoden

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 Objekt-Speicher oder Index zurück.

IDBDatabase.deleteObjectStore()

Zerstört den Objekt-Speicher mit dem angegebenen Namen in der verbundenen Datenbank sowie alle Indizes, die darauf verweisen.

IDBDatabase.transaction()

Gibt sofort ein Transaktions-Objekt (IDBTransaction) zurück, das die Methode IDBTransaction.objectStore enthält, die Sie verwenden können, um auf Ihren Objekt-Speicher zuzugreifen. Läuft in einem separaten Thread.

Ereignisse

Hören 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 Änderung der Datenbankstruktur angefordert wurde.

Die folgenden Ereignisse sind für IDBDatabase verfügbar durch Ereignis-Bubbling von IDBTransaction:

IDBTransaction abort

Ein Ereignis, das ausgelöst wird, wenn eine Transaktion abgebrochen wird.

IDBTransaction error

Ein Ereignis, das ausgelöst wird, wenn eine Anfrage einen Fehler zurückgibt und das Ereignis zum Verbindungsobjekt hochblubbert.

Beispiel

Im folgenden Code-Snippet öffnen wir eine Datenbank asynchron (IDBFactory), behandeln Erfolgs- und Fehlerfälle und erstellen einen neuen Objekt-Speicher, falls ein Upgrade erforderlich ist (IDBDatabase). Für ein vollständiges funktionierendes Beispiel siehe unsere To-do Notifications 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.";
};

Die nächste Zeile öffnet eine Transaktion in der Datenbank, dann einen Objekt-Speicher, den wir dann innerhalb dessen manipulieren können.

js
const objectStore = db
  .transaction("toDoList", "readwrite")
  .objectStore("toDoList");

Spezifikationen

Specification
Indexed Database API 3.0
# database-interface

Browser-Kompatibilität

Siehe auch