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.

La interfaz IDBDatabase de la API de IndexedDB (Base de datos indexada) proporciona una conexión a una base de datos; puede usar un objeto IDBDatabase para abrir una transacción en su base de datos y luego crear, manipular y eliminar objetos (datos) en esa base de datos. La interfaz proporciona la única forma de obtener y administrar versiones de la base de datos.

Nota: Esta característica está disponible en Web Workers.

Nota: Todo lo que haces en IndexedDB siempre sucede en el contexto de una transacción, que representa interacciones con datos en la base de datos. Todos los objetos en IndexedDB, incluidos los almacenes de objetos, los índices y los cursores, están vinculados a una transacción en particular. Por lo tanto, no puede ejecutar comandos, acceder a datos o abrir nada fuera de una transacción.

EventTarget IDBDatabase

Propiedades de instancia

IDBDatabase.name Read only

Una cadena que contiene el nombre de la base de datos conectada.

IDBDatabase.version Read only

Un entero de 64 bits que contiene la versión de la base de datos conectada. Cuando se crea una base de datos por primera vez, este atributo es una cadena vacía.

IDBDatabase.objectStoreNames Read only

Un DOMStringList que contiene una lista de los nombres de los objetos almacenados actualmente en la base de datos conectada.

Métodos de instancia

Hereda de: EventTarget

IDBDatabase.close()

Regresa inmediatamente y cierra la conexión a una base de datos en un hilo separado.

IDBDatabase.createObjectStore()

Crea y devuelve un nuevo índice o almacén de objetos.

IDBDatabase.deleteObjectStore()

Destruye el almacén de objetos con el nombre dado en la base de datos conectada, junto con los índices que hacen referencia a él.

IDBDatabase.transaction()

Devuelve inmediatamente un objeto de transacción (IDBTransaction) que contiene el método IDBTransaction.objectStore, que puede usar para acceder a su almacén de objetos. Se ejecuta en un hilo separado.

Eventos

Detecte estos eventos usando addEventListener() o asignando un detector de eventos a la propiedad oneventname de esta interfaz.

close

Un evento activado cuando la conexión de la base de datos se cierra inesperadamente.

versionchange

Un evento activado cuando se solicitó un cambio en la estructura de la base de datos.

Los siguientes eventos están disponibles para IDBDatabase mediante el recorrido de eventos desde IDBTransaction:

IDBTransaction abort

Un evento activado cuando se aborta una transacción.

IDBTransaction error

Un evento que se activa cuando una solicitud devuelve un error y el evento aparece en el objeto de conexión.

Ejemplo

En el siguiente fragmento de código, abrimos una base de datos de forma asíncrona (IDBFactory), manejamos los casos de éxito y error, y creamos un nuevo almacén de objetos en caso de que se necesite una actualización de (IDBdatabase). Para ver un ejemplo funcional completo, consulte nuestra aplicación Notificaciones de tareas (ver ejemplo en vivo).

js
// Abramos nuestra base de datos
const DBOpenRequest = window.indexedDB.open("toDoList", 4);

// Estos dos manejadores de eventos actúan sobre el objeto IDBDatabase,
// cuando la base de datos se abre con éxito o no
DBOpenRequest.onerror = (event) => {
  note.innerHTML += "<li>Error loading database.</li>";
};

DBOpenRequest.onsuccess = (event) => {
  note.innerHTML += "<li>Database initialized.</li>";

  // almacenar el resultado de abrir la base de datos en
  // la variable db. Esto se usa mucho más adelante.
  db = DBOpenRequest.result;

  // Ejecute la función displayData() para completar la lista
  // de tareas con todos los datos de la lista de tareas que
  // ya están en el IDB
  displayData();
};

// Este evento maneja el evento por el cual se necesita crear
// una nueva versión de la base de datos. O no se ha creado antes,
// o se ha enviado un nuevo número de versión a través de la línea
// window.indexedDB.open anterior.

DBOpenRequest.onupgradeneeded = (event) => {
  const db = event.target.result;

  db.onerror = (event) => {
    note.innerHTML += "<li>Error loading database.</li>";
  };

  // Cree un objectStore para esta base de datos
  // usando IDBDatabase.createObjectStore

  const objectStore = db.createObjectStore("toDoList", {
    keyPath: "taskTitle",
  });

  // definir qué elementos de datos contendrá el objectStore

  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.innerHTML += "<li>Object store created.</li>";
};

La siguiente línea abre una transacción en la base de datos, luego abre un almacén de objetos en el que podemos manipular los datos dentro.

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

Especificaciones

Specification
Indexed Database API 3.0
# database-interface

Compatibilidad con navegadores

BCD tables only load in the browser

Véase también