Removendo Registros com o IndexedDB em JavaScript
No IndexedDB, a remoção de dados de um armazenamento pode ser feita utilizando os métodos delete()
e clear()
da interface IDBObjectStore
.
Remoção com o Método delete()
O método delete()
remove registros específicos com base em uma chave fornecida ou em um intervalo de chaves.
Sintaxe:
delete key;
delete IDBKeyRange;
O parâmetro key
pode ser:
- Um valor único de chave.
- Um intervalo de chaves definido por um objeto
IDBKeyRange
.
O método delete()
retorna um objeto IDBRequest
. Dependendo do resultado da operação, os seguintes eventos podem ser disparados:
- success: Indica que a remoção foi bem-sucedida, com o atributo
result
do objetoIDBRequest
retornandoundefined
. - error: Indica que ocorreu um erro, com o atributo
error
do objetoIDBRequest
contendo detalhes sobre o problema.
Os eventos podem ser tratados por meio das propriedades onsuccess
e onerror
.
O exemplo a seguir demonstra como remover um registro cuja chave seja igual a 1
:
const request = indexedDB.open("test", 5); // Abre ou cria o banco de dados "test"
// Durante a criação ou atualização do banco de dados, configura o armazenamento "users"
request.onupgradeneeded = (event) => {
const db = event.target.result; // Obtém a instância do banco de dados
// Cria o armazenamento "users" com chave primária "id" e incremento automático
const userStore = db.createObjectStore("users", { keyPath: "id", autoIncrement: true });
// Adiciona registros iniciais
userStore.add({ name: "Tom", age: 39 });
userStore.add({ name: "Bob", age: 43 });
userStore.add({ name: "Sam", age: 28 });
};
// Após abrir o banco de dados, remove o registro cuja chave seja 1
request.onsuccess = (event) => {
const db = event.target.result; // Obtém a instância do banco de dados
const transaction = db.transaction(["users"], "readwrite"); // Cria uma transação de leitura e escrita
const userStore = transaction.objectStore("users"); // Obtém o armazenamento "users"
// Remove o registro com chave igual a 1
const deleteRequest = userStore.delete(1);
// Trata o sucesso ou erro da remoção
deleteRequest.onsuccess = () => console.log("Registro removido com sucesso");
deleteRequest.onerror = () => console.error("Erro ao remover registro:", deleteRequest.error);
};
IDBKeyRange
A interface IDBKeyRange
fornece métodos para definir intervalos de chaves, permitindo remover múltiplos registros com base em condições específicas.
IDBKeyRange.bound()
: Cria um intervalo com limites inferior e superiorIDBKeyRange.only()
: Cria um intervalo que contém apenas um valorIDBKeyRange.lowerBound()
: Cria um intervalo com um limite inferiorIDBKeyRange.upperBound()
: Cria um intervalo com um limite superior
Tabela de Intervalos de Chaves
Intervalo | Código | Descrição |
---|---|---|
>= x | IDBKeyRange.lowerBound(x) | Valores de chave maiores ou iguais a x . |
> x | IDBKeyRange.lowerBound(x, true) | Valores de chave maiores que x . |
<= y | IDBKeyRange.upperBound(y) | Valores de chave menores ou iguais a y . |
< y | IDBKeyRange.upperBound(y, true) | Valores de chave menores que y . |
>= x && <= y | IDBKeyRange.bound(x, y) | Valores entre x e y , inclusivos. |
> x && < y | IDBKeyRange.bound(x, y, true, true) | Valores entre x e y , exclusivos. |
> x && <= y | IDBKeyRange.bound(x, y, true, false) | Valores maiores que x e menores ou iguais a y . |
>= x && < y | IDBKeyRange.bound(x, y, false, true) | Valores maiores ou iguais a x e menores que y . |
= z | IDBKeyRange.only(z) | Valores iguais a z . |
No exemplo abaixo, removemos todos os registros cuja chave seja menor ou igual a 2
:
const deleteRequest = userStore.delete(IDBKeyRange.upperBound(2));
deleteRequest.onsuccess = () => console.log("Registros removidos com sucesso");
deleteRequest.onerror = () => console.error("Erro ao remover registros:", deleteRequest.error);
Remoção de Todos os Dados com o Método clear()
O método clear()
remove todos os registros de um armazenamento. Ele não aceita parâmetros e é ideal para cenários em que é necessário limpar completamente o armazenamento.
Retorno:
- success: Indica que todos os registros foram removidos com sucesso, com o atributo
result
do objetoIDBRequest
retornandoundefined
. - error: Indica que ocorreu um erro, com o atributo
error
do objetoIDBRequest
fornecendo detalhes sobre o problema.
O exemplo a seguir demonstra como remover todos os registros do armazenamento users
:
const clearRequest = userStore.clear();
clearRequest.onsuccess = () => console.log("Todos os registros foram removidos com sucesso");
clearRequest.onerror = () => console.error("Erro ao remover registros:", clearRequest.error);
Documentação oficial: