Obtendo Registros do Armazenamento IndexedDB API - JavaScript
Para recuperar registros armazenados no IndexedDB, podemos utilizar diversos métodos disponíveis no objeto IDBObjectStore
Recuperando Todos os Registros
Para obter todos os registros de um armazenamento, utilizamos o método getAll()
IDBObjectStore
O método getAll()
IDBRequest
success
result
error
onsuccess
onerror
Por exemplo, recuperamos todos os registros do armazenamento "users"
const request = indexedDB.open("test", 5); // Conecta ao banco de dados 'test'
// Durante a criação ou alteração da versão do banco de dados, cria o armazenamento 'users'
request.onupgradeneeded = (event) => {
const db = event.target.result; // Obtém a instância do banco de dados
const userStore = db.createObjectStore("users", { keyPath: "id", autoIncrement: true }); // Cria o armazenamento
userStore.add({ name: "Tom", age: 39 });
userStore.add({ name: "Bob", age: 43 });
userStore.add({ name: "Sam", age: 28 });
};
// Recupera os registros após a abertura bem-sucedida do banco de dados
request.onsuccess = (event) => {
const db = event.target.result;
const transaction = db.transaction(["users"], "readwrite"); // Cria uma transação
const userStore = transaction.objectStore("users"); // Obtém o armazenamento 'users'
const getRequest = userStore.getAll(); // Recupera todos os registros
getRequest.onsuccess = () => {
const users = getRequest.result; // Obtém os registros recuperados
console.log(users);
};
getRequest.onerror = (e) => console.error(e.target.error.message); // Trata erros
};
No exemplo acima, os registros recuperados são armazenados na constante users
[
{ name: "Tom", age: 39, id: 1},
{ name: "Bob", age: 43, id: 2},
{ name: "Sam", age: 28, id: 3}
]
Como o resultado do método getAll()
getRequest.onsuccess = () => {
const users = getRequest.result;
users.forEach(user => {
console.log(`Name: ${user.name}, Age: ${user.age}`);
});
};
Filtrando com Base em Chaves
O método getAll()
getAll(query)
getAll(query, count)
: Pode ser uma chave específica ou um objeto IDBKeyRange que define um intervalo de chaves.query
: Permite limitar a quantidade máxima de registros na consulta.count
Por exemplo, para recuperar registros cuja chave seja igual a 2:
const getRequest = userStore.getAll(2); // Recupera registros cuja chave seja igual a 2
getRequest.onsuccess = (e) => {
console.log(e.target.result);
};
Uso do IDBKeyRange
O objeto IDBKeyRange
: Define um intervalo entreIDBKeyRange.bound(x, y)
ex
.y
: Define um intervalo contendo apenas a chaveIDBKeyRange.only(z)
.z
: Define um intervalo começando emIDBKeyRange.lowerBound(x)
.x
: Define um intervalo terminando emIDBKeyRange.upperBound(y)
.y
Por exemplo, para recuperar registros cuja chave seja menor ou igual a 2:
const getRequest = userStore.getAll(IDBKeyRange.upperBound(2));
getRequest.onsuccess = () => {
console.log(getRequest.result);
};
Recuperando um Registro Específico
Para buscar um único registro com base em sua chave, utilizamos o método get()
O método get()
IDBRequest
success
result
result
undefined
error
Por exemplo, para recuperar o registro com chave 1:
const request = indexedDB.open("test", 5);
// Criação do armazenamento
request.onupgradeneeded = (event) => {
const db = event.target.result;
db.createObjectStore("users", { keyPath: "id", autoIncrement: true });
};
// Recuperação de um registro
request.onsuccess = (event) => {
const db = event.target.result;
const transaction = db.transaction(["users"], "readwrite");
const userStore = transaction.objectStore("users");
const getRequest = userStore.get(1); // Recupera o registro com chave 1
getRequest.onsuccess = () => console.log(getRequest.result); // Exibe o registro recuperado
getRequest.onerror = (e) => console.error(e.target.error.message); // Trata erros
};
O registro recuperado também pode ser acessado diretamente no evento onsuccess:
const getRequest = userStore.get(1); // Recupera o registro com chave 1
getRequest.onsuccess = (e) => {
const user = e.target.result; // Acessa o registro
console.log(`Name: ${user.name}, Age: ${user.age}`);
};