IDBDatabase
===========

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-US) 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 (en-US), 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

IDBDatabasePropiedades de instancia
------------------------

`IDBDatabase.name` (en-US) Read only 

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

`IDBDatabase.version` (en-US) 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` (en-US) Read only 

Un `DOMStringList` (en-US) que contiene una lista de los nombres de los objetos almacenados (en-US) actualmente en la base de datos conectada.

Métodos de instancia
--------------------

Hereda de: EventTarget

`IDBDatabase.close()` (en-US)

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

`IDBDatabase.createObjectStore()` (en-US)

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

`IDBDatabase.deleteObjectStore()` (en-US)

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` (en-US)) que contiene el método `IDBTransaction.objectStore` (en-US), 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` (en-US)

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

`versionchange` (en-US)

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` (en-US):

`IDBTransaction` `abort` (en-US)

Un evento activado cuando se aborta una transacción.

`IDBTransaction` `error` (en-US)

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` (en-US)), 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 with JavaScript enabled. Enable JavaScript to view data.

Véase también
-------------

* Uso de IndexedDB
* Iniciando transacciones: `IDBDatabase`
* Uso de transacciones: `IDBTransaction` (en-US)
* Configuración de un rango de claves: `IDBKeyRange` (en-US)
* Recuperar y realizar cambios en sus datos: `IDBObjectStore`
* Uso de cursores: `IDBCursor`
* Ejemplo de referencia: Notificaciones de tareas (Ver el ejemplo en vivo).