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.
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étodoIDBTransaction.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
:
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).
// 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.
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
- Uso de IndexedDB
- Iniciando transacciones:
IDBDatabase
- Uso de transacciones:
IDBTransaction
- Configuración de un rango de claves:
IDBKeyRange
- Recuperar y realizar cambios en sus datos:
IDBObjectStore
- Uso de cursores:
IDBCursor
- Ejemplo de referencia: Notificaciones de tareas (Ver el ejemplo en vivo).