Criando, Abrindo e Excluindo um Banco de Dados IndexedDB API - JavaScript
Introdução
A Indexed Database API, ou simplesmente IndexedDB API, é uma interface que permite trabalhar com bancos de dados diretamente no navegador. Este banco de dados é conhecido como IndexedDB. Uma das suas principais características é ser não relacional, ou seja, faz parte da categoria de bancos NoSQL. A ideia central do IndexedDB é armazenar objetos associados a chaves específicas.
Abrindo ou criando um banco de dados IndexedDB
Para acessar a funcionalidade do IndexedDB, utilizamos a propriedade indexedDB do objeto global window:
const dbFactory = window.indexedDB;
console.log(dbFactory); // IDBFactory{}
Essa propriedade é um objeto do tipo IDBFactory
open()
indexedDB.open(name);
indexedDB.open(name, version);
O método open()
(obrigatório): o nome do banco de dados que será aberto ou criado.name
(opcional): define a versão do banco de dados e determina sua estrutura (esquema).version
Exemplo básico:
const request = indexedDB.open("test"); // conecta ao banco de dados "test"
Caso o banco de dados "test" não exista, ele será criado automaticamente.
O método open()
IDBOpenDBRequest
success
onsuccess
const request = indexedDB.open("test"); // conecta ao banco "test"
// Manipulador para o evento de sucesso
request.onsuccess = (event) => {
const database = event.target.result; // acessa o banco de dados
console.log(database.name); // exibe o nome do banco ("test")
};
No manipulador do evento, o banco de dados pode ser acessado através de event.target.result
IDBDatabase
Tratando erros ao abrir o banco de dados
Ao tentar abrir o banco, erros podem ocorrer, como falta de permissões no navegador. Para lidar com isso, utilizamos o evento error
onerror
const request = indexedDB.open("test"); // conecta ao banco "test"
// Manipulador para o evento de erro
request.onerror = (event) => {
const error = event.target.error; // informações do erro
console.error("Erro ao abrir o banco:", error.message);
};
Monitorando a criação de um banco de dados
Caso o banco não exista, ele será criado automaticamente ao tentar abri-lo. Para rastrear essa criação, utilizamos o evento upgradeneeded
Quando o banco solicitado ainda não existe.
Quando a versão solicitada é maior do que a versão atual, desencadeando uma atualização.
O manipulador do evento recebe um objeto do tipo IDBVersionChangeEvent
request.onupgradeneeded = (event) => {
console.log("Versão anterior:", event.oldVersion); // versão antiga
console.log("Nova versão:", event.newVersion); // nova versão
const database = event.target.result; // acessa o banco
};
Este evento é ideal para configurar e inicializar o banco de dados, como criar armazenamentos de objetos (object stores) ou realizar outras configurações.
Obtendo a lista de bancos de dados
O método databases()
IDBFactory
Promise
: nome do banco de dados.name
: versão do banco.version
indexedDB.databases()
.then((databases) => {
console.log(databases);
});
Exemplo de saída:
[ { name: "test", version: 1 }, { name: "test2", version: 1 } ]
Neste caso, há dois bancos de dados: "test"
"test2"
1
Excluindo um banco de dados
Para excluir um banco de dados, utilizamos o método deleteDatabase()
IDBFactory
indexedDB.deleteDatabase("test2");
O método retorna um objeto IDBOpenDBRequest
success
error
const DBDeleteRequest = indexedDB.deleteDatabase("test2");
// Manipulador para erros
DBDeleteRequest.onerror = (event) => {
console.error("Erro ao excluir o banco de dados.");
};
// Manipulador para sucesso
DBDeleteRequest.onsuccess = (event) => {
console.log("Banco de dados excluído com sucesso.");
console.log(event.result); // deve ser undefined
};
Se a exclusão for bem-sucedida, a propriedade result
success
undefined