Start · Sprachen · JavaScript · Referenz · IDBObjectStore.name

IDBObjectStore.name

Eigenschaft

Liest den Namen eines Objektspeichers in IndexedDB. Innerhalb einer <code>versionchange</code>-Transaktion lässt sich der Speicher über diese Eigenschaft auch umbenennen.

seit JavaScript Baseline: alle Browser (Umbenennen per Zuweisung s Kategorie: webapi

Signatur

IDBObjectStore.name

Beschreibung

Die Eigenschaft name eines IDBObjectStore enthält den Namen, unter dem der Objektspeicher in der Datenbank angelegt wurde, also den Wert, den Sie an IDBDatabase.createObjectStore() übergeben haben. Beim Lesen erhalten Sie immer eine Zeichenkette.

Meist dient das Lesen dem Debuggen oder Protokollieren. Nützlich ist es auch in generischem Code, der mit mehreren Speichern arbeitet. Dort können Sie über transaction.objectStore(name) oder db.objectStoreNames iterieren und mit store.name nachsehen, welcher Speicher gerade verarbeitet wird.

Sie können der Eigenschaft auch einen neuen Wert zuweisen und so einen Objektspeicher umbenennen, ohne seine Daten zu kopieren. Das geht aber nur innerhalb einer Upgrade-Transaktion (Modus versionchange), also im Handler von upgradeneeded. Das Umbenennen passt die Liste IDBDatabase.objectStoreNames an. Die Indizes und Datensätze des Speichers bleiben erhalten.

Parameter

Name Typ Default Beschreibung
$neuerName string Nur beim Schreiben: der neue Name des Objektspeichers. Die Zuweisung ist nur innerhalb einer versionchange-Transaktion erlaubt. Ein Wert, der keine Zeichenkette ist, wird in eine Zeichenkette umgewandelt.

Rückgabewert

Typ
string
Beschreibung
Der aktuelle Name des Objektspeichers.

Beispiele

Namen eines Objektspeichers auslesen

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

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

request.onsuccess = (event) => {
  const db = event.target.result;
  const tx = db.transaction('produkte', 'readonly');
  const store = tx.objectStore('produkte');
  console.log(`Aktiver Speicher: ${store.name}`);
};
Aktiver Speicher: produkte

Objektspeicher beim Versions-Upgrade umbenennen

// Version 1 hatte einen Speicher namens 'kunden', ab Version 2 heißt er 'kontakte'
const request = indexedDB.open('crm', 2);

request.onupgradeneeded = (event) => {
  const db = event.target.result;
  const tx = event.target.transaction; // versionchange-Transaktion

  if (event.oldVersion < 1) {
    db.createObjectStore('kontakte', { keyPath: 'id' });
  } else if (event.oldVersion < 2) {
    const store = tx.objectStore('kunden');
    store.name = 'kontakte'; // Daten und Indizes bleiben erhalten
    console.log([...db.objectStoreNames]);
  }
};
["kontakte"]

Fehler beim Umbenennen außerhalb eines Upgrades

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

request.onsuccess = (event) => {
  const db = event.target.result;
  const store = db.transaction('produkte', 'readwrite').objectStore('produkte');
  try {
    store.name = 'artikel';
  } catch (err) {
    console.log(err.name); // nur in versionchange-Transaktionen erlaubt
  }
};
InvalidStateError

Alle Speicher einer Transaktion protokollieren

const logStores = (db) => {
  const names = [...db.objectStoreNames];
  const tx = db.transaction(names, 'readonly');
  for (const n of names) {
    const store = tx.objectStore(n);
    const countReq = store.count();
    countReq.onsuccess = () => console.log(`${store.name}: ${countReq.result} Einträge`);
  }
};

const req = indexedDB.open('shop', 1);
req.onsuccess = (e) => logStores(e.target.result);
produkte: 42 Einträge

// Wichtig · Fallstricke

In diesen Fällen löst die Zuweisung eine DOMException aus:

  • InvalidStateError: Die Transaktion hat nicht den Modus versionchange, oder der Objektspeicher wurde bereits gelöscht.
  • TransactionInactiveError: Die Upgrade-Transaktion ist nicht mehr aktiv, zum Beispiel weil die Zuweisung in einem setTimeout oder nach einem await auf ein fremdes Promise ausgeführt wird.
  • ConstraintError: In der Datenbank gibt es bereits einen Objektspeicher mit dem neuen Namen.

Wenn Sie den bisherigen Namen noch einmal zuweisen, geschieht nichts, und es wird auch kein Fehler ausgelöst. Wird die Upgrade-Transaktion abgebrochen, erhält der Speicher wieder seinen alten Namen. In älteren Browsern (vor Chrome 58, Firefox 51 und Safari 10.1) ist die Eigenschaft nur lesbar. Dort bleibt nur der Weg, einen neuen Speicher anzulegen, die Daten zu kopieren und den alten Speicher zu löschen.