Atualizado: 21/06/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Gerenciando Objetos de Armazenamento com o IndexedDB em JavaScript

Introdução

O IndexedDB utiliza a interface IDBDatabase para estabelecer conexões, gerenciar armazenamentos (object stores) e executar consultas a dados. A interface IDBDatabase disponibiliza propriedades úteis para acessar informações do banco de dados:

  • name: retorna o nome do banco de dados conectado.
  • version: retorna o número da versão do banco de dados. Ao criar um banco de dados, esse valor é inicialmente uma string vazia. A versão serve para controlar alterações na estrutura do banco.
  • objectStoreNames: retorna uma lista dos nomes dos armazenamentos existentes no banco conectado, representada por um objeto do tipo DOMStringList.

A seguir, um exemplo de como obter essas informações:

const request = indexedDB.open("test"); // Conectando ao banco de dados "test"

// Evento acionado ao abrir o banco com sucesso
request.onsuccess = (event) => {
  const database = event.target.result; // Acessa a conexão com o banco
  console.log(database.name); // Nome do banco de dados: "test"
  console.log(database.version); // Versão do banco de dados
  console.log(database.objectStoreNames); // Lista de armazenamentos no banco
};

Além de suas propriedades, a interface IDBDatabase oferece métodos importantes para o gerenciamento do banco de dados:

  • close(): encerra a conexão com o banco de dados.
  • createObjectStore(): cria um armazenamento.
  • deleteObjectStore(): remove um armazenamento.
  • transaction(): retorna um objeto de transação (IDBTransaction), usado para acessar armazenamentos e realizar operações em dados.

É importante ressaltar que a criação de armazenamentos só é permitida durante a criação inicial do banco de dados ou quando sua versão é alterada. Da mesma forma, a exclusão de armazenamentos só pode ser realizada durante uma mudança de versão.

Criando Armazenamentos de Objetos

O método createObjectStore() é usado para criar armazenamentos:

createObjectStore(name);
createObjectStore(name, options);

O primeiro argumento é o nome do armazenamento. Opcionalmente, um objeto de configuração pode ser passado como segundo argumento. Este objeto aceita as seguintes propriedades:

  • keyPath: define o nome do atributo que será usado como chave para cada objeto.
  • autoIncrement: se definido como true, valores para as chaves serão gerados automaticamente. O valor padrão é false, o que significa que os valores das chaves devem ser fornecidos explicitamente.

A maneira como as chaves são gerenciadas depende da combinação de keyPath e autoIncrement. A tabela abaixo explica as possibilidades:

keyPathautoIncrementDescrição
Não especificadofalseO armazenamento aceita valores de qualquer tipo, incluindo tipos primitivos (números e strings). No entanto, a chave precisa ser fornecida explicitamente ao adicionar objetos.
EspecificadofalseO armazenamento aceita apenas objetos (não primitivos). Esses objetos precisam conter uma propriedade cujo nome corresponda ao valor de keyPath.
Não especificadotrueO armazenamento aceita valores de qualquer tipo. As chaves são geradas automaticamente, mas podem ser fornecidas manualmente, se necessário.
EspecificadotrueO armazenamento aceita apenas objetos. As chaves correspondem à propriedade especificada em keyPath. Se a propriedade não existir no objeto, uma chave será gerada automaticamente e adicionada ao objeto.

A seguir, criamos um armazenamento chamado "users" na base de dados test, configurado para usar uma chave chamada "id", gerando automaticamente os valores:

Neste exemplo, a chave para cada objeto será a propriedade "id", gerada automaticamente. O método db.createObjectStore() retorna um objeto do tipo IDBObjectStore, que representa o armazenamento criado.

É importante destacar que se o número da versão do banco for incrementado ao abrir a conexão, os armazenamentos existentes são preservados. Tentativas de recriar um armazenamento já existente resultarão em erro.

Excluindo Armazenamentos

Para excluir um armazenamento, utiliza-se o método deleteObjectStore() e informa-se o nome do armazenamento a ser removido. Essa operação só é permitida durante uma alteração de versão do banco.

No exemplo a seguir, o armazenamento "users" é removido e recriado com novas configurações:

const request = indexedDB.open("test", 3); // Conecta ao banco de dados "test" na versão 3

request.onupgradeneeded = (event) => {
  const db = event.target.result; // Obtém o banco de dados
  // Remove o armazenamento "users"
  db.deleteObjectStore("users");
  // Cria novamente o armazenamento "users"
  db.createObjectStore("users", { keyPath: "id", autoIncrement: true });
  console.log(db.objectStoreNames); // Lista de armazenamentos no banco
};

Nesse caso, o armazenamento antigo é excluído antes de ser recriado com novos parâmetros. Essa abordagem é útil para redefinir as configurações de um armazenamento já existente.

Documentação oficial:

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com