Start · Sprachen · JavaScript · Referenz · IDBTransaction.db

IDBTransaction.db

Eigenschaft

Schreibgeschützte Eigenschaft, die das <code>IDBDatabase</code>-Objekt zurückgibt, also die Datenbankverbindung, zu der die Transaktion gehört.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

IDBTransaction.db

Beschreibung

Die schreibgeschützte Eigenschaft db einer IDBTransaction verweist auf die IDBDatabase-Verbindung, über die die Transaktion mit IDBDatabase.transaction() gestartet wurde. Während eines upgradeneeded-Ereignisses verweist sie auf die Verbindung, deren Versions-Upgrade gerade läuft.

Nützlich ist die Eigenschaft, wenn eine Funktion nur die Transaktion übergeben bekommt, aber trotzdem Informationen zur Datenbank braucht, etwa name, version oder objectStoreNames. Häufig kommt sie auch in Event-Handlern wie complete, error oder abort vor, wo man über event.target.db an die Verbindung kommt.

Der Wert ist immer genau dieselbe Objektreferenz, die auch transaction() aufgerufen hat. Es wird also keine neue Verbindung geöffnet. Die Eigenschaft liefert auch dann noch das Objekt, wenn die Transaktion schon beendet ist.

Rückgabewert

Typ
IDBDatabase
Beschreibung
Die Datenbankverbindung (IDBDatabase), zu der die Transaktion gehört.

Beispiele

Datenbankinfos aus einer Transaktion auslesen

const request = indexedDB.open('shop', 1);

request.onupgradeneeded = (event) => {
  event.target.result.createObjectStore('produkte', { keyPath: 'id' });
};

request.onsuccess = (event) => {
  const db = event.target.result;
  const tx = db.transaction('produkte', 'readonly');

  console.log(tx.db === db);
  console.log(tx.db.name, tx.db.version);
};
true shop 1

Hilfsfunktion, die nur die Transaktion kennt

const logTransaction = (tx) => {
  const { name, version, objectStoreNames } = tx.db;
  console.log(`DB "${name}" v${version}, Stores: ${[...objectStoreNames].join(', ')}`);
  console.log(`Modus: ${tx.mode}`);
};

const request = indexedDB.open('shop', 1);
request.onupgradeneeded = (e) => {
  e.target.result.createObjectStore('produkte', { keyPath: 'id' });
};
request.onsuccess = (e) => {
  const tx = e.target.result.transaction('produkte', 'readwrite');
  logTransaction(tx);
  tx.objectStore('produkte').put({ id: 1, titel: 'Tasse' });
};
DB "shop" v1, Stores: produkte Modus: readwrite

Verbindung im complete-Handler schließen

const request = indexedDB.open('shop', 1);
request.onupgradeneeded = (e) => {
  e.target.result.createObjectStore('produkte', { keyPath: 'id' });
};
request.onsuccess = (e) => {
  const tx = e.target.result.transaction('produkte', 'readwrite');
  tx.objectStore('produkte').put({ id: 2, titel: 'Teller' });

  tx.oncomplete = (event) => {
    const db = event.target.db; // Verbindung über die Transaktion
    console.log(`Gespeichert in ${db.name}, Verbindung wird geschlossen`);
    db.close();
  };
  tx.onerror = (event) => console.error('Fehler:', event.target.error);
};
Gespeichert in shop, Verbindung wird geschlossen

// Wichtig · Fallstricke

  • Die Eigenschaft ist schreibgeschützt. Wer ihr etwas zuweist, bewirkt nichts; im Strict Mode wird ein TypeError geworfen, weil es keinen Setter gibt.
  • tx.db öffnet keine neue Verbindung. Ruft man tx.db.close() auf, wird die gemeinsam genutzte Verbindung geschlossen. Danach werfen weitere transaction()-Aufrufe einen InvalidStateError.
  • In einem error-Handler, der an der Transaktion hängt, kann event.target auch der auslösende IDBRequest sein, weil das Ereignis nach oben weitergereicht wird (Bubbling). In dem Fall nimmt man besser event.currentTarget.db.
  • Seit Jahren in allen modernen Browsern verfügbar, auch in Web Workern. Im privaten Modus mancher Browser kann IndexedDB eingeschränkt sein.