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
resultdo objetoIDBRequestretornandoundefined. - error: Indica que ocorreu um erro, com o atributo
errordo objetoIDBRequestcontendo 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
resultdo objetoIDBRequestretornandoundefined. - error: Indica que ocorreu um erro, com o atributo
errordo objetoIDBRequestfornecendo 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: