Actualizarea obiectelor din depozit
Metoda put() a interfeței IDBObjectStore actualizează o înregistrare în baza de date sau inserează o nouă înregistrare, dacă elementul dat încă nu există.
put(item)
put(item, key)
Primul parametru - item reprezintă valoarea care este actualizată sau adăugată în baza de date. Al doilea parametru, opțional, key reprezintă cheia după care trebuie să actualizeze/adauge obiectul.
Metoda put() returnează un obiect IDBRequest. În cazul unei actualizări/adaugări de succes, la obiectul IDBRequest se declanșează evenimentul success, iar proprietatea sa result va conține obiectul cu cheia specificată. În caz de eroare, se generează evenimentul error împreună cu o excepție de tip DOMException. Pentru a gestiona aceste evenimente, se pot folosi, respectiv, proprietățile onsuccess și onerror.
De exemplu, să presupunem că depozitul users în baza de date test conține următoarele obiecte:
[
{ "name": "Tom", "age": 39, "id": 1},
{ "name": "Bob", "age": 43, "id": 2},
{ "name": "Sam", "age": 28, "id": 3}
]
De exemplu, să actualizăm obiectul din depozitul "users", care are cheia egală cu 1:
const request = indexedDB.open("test", 5); // ne conectăm la baza de date test
// la crearea sau modificarea versiunii bazei de date, creăm în ea un depozit users
request.onupgradeneeded = (event) => {
const db = event.target.result; // obținem baza de date
// cheia este proprietatea id, și este autoincrementată
db.createObjectStore("users", { keyPath: "id", autoIncrement: true });
};
// la deschiderea bazei de date modificăm în depozitul users 1 obiect
request.onsuccess = (event) => {
const db = event.target.result; // obținem baza de date
const transaction = db.transaction(["users"], "readwrite"); // creăm o tranzacție
const userStore = transaction.objectStore("users"); // obținem depozitul users
// obținem obiectul cu id=1
const getRequest = userStore.get(1);
getRequest.onsuccess = () => {
const user = getRequest.result;
console.log(user);
// schimbăm valorile proprietăților
user.name = "Tomas";
user.age = 22;
// actualizăm valorile
const updateRequest = userStore.put(user);
updateRequest.onsuccess = () => console.log("Data successfully updated");
};
getRequest.onerror = (e) => console.log(e.target.error.message); // afișăm mesajul de eroare
};