MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Executarea interogărilor în baza de date

Toate operațiunile cu baza de date IndexDB sunt încapsulate în tranzacții, care reprezintă tipul IDBTransaction. Pentru a crea obiecte de acest tip, la obiectul bazei de date IDBDatabase se apelează metoda transaction():

transaction(storeNames)
transaction(storeNames, mode)

Această metodă acceptă următoarele parametri:

  • storeNames: un array de nume ale magazinelor de obiecte, la care se accesează în tranzacție.
const request = indexedDB.open("test", 3); // ne conectăm la bd test

request.onsuccess = (event) => {
   const db = event.target.result;  // obținem bd
   // creăm tranzacție
   const transaction = db.transaction("users");    // accesăm magazinul "users"
   console.log(transaction);
};

Dacă trebuie să implicăm mai multe magazine, atunci sunt definite într-un array:

const transaction = db.transaction(["users", "companies"]); // accesăm magazinele "users" și "companies"

Dacă trebuie să specificăm toate magazinele de obiecte ale bazei de date, atunci se poate folosi proprietatea IDBDatabase.objectStoreNames:

const transaction = db.transaction(db.objectStoreNames);

Mode: un parametru opțional, stabilește tipul de acces la baza de date. Poate lua următoarele valori:

  • readonly: datele sunt accesibile doar pentru citire. Această valoare este utilizată implicit, dacă parametrul mode nu este specificat explicit
  • readwrite: datele sunt accesibile atât pentru citire, cât și pentru scriere
  • versionchange: sunt permise citirea și scrierea, precum și operațiunile de ștergere sau creare a magazinelor și indexurilor de obiecte

Exemplu de utilizare:

const transaction = db.transaction("users", "readwrite");

Cu ajutorul proprietăților IDBTransaction se poate obține anumite informații despre tranzacție:

  • db: obiectul bazei de date (IDBDatabase)
  • error: informații despre eroare sub forma unui obiect DOMException
  • mode: modul de acces la baza de date, dacă nu este setat, atunci implicit readonly
  • objectStoreNames: lista magazinelor implicate în tranzacție (obiect DOMStringList), unde fiecare magazin reprezintă un obiect IDBObjectStore

De exemplu, obținerea datelor:

const request = indexedDB.open("test", 3); // ne conectăm la bd test

request.onsuccess = (event) => {
   const db = event.target.result;  // obținem bd
   // creăm tranzacție
   const transaction = db.transaction(["users"], "readwrite");
   console.log(transaction.db.name);    // test
   console.log(transaction.mode);    // readwrite
   console.log(transaction.objectStoreNames);  // DOMStringList {0: "users", length: 1}
};

Obținerea magazinului

Pentru a efectua operațiuni propriu-zise cu magazinul în cadrul tranzacției se utilizează diferite metode ale obiectului IDBObjectStore, care de fapt reprezintă magazinul. Pentru a obține obiectul IDBObjectStore la obiectul tranzacției IDBTransaction se apelează metoda objectStore():

const userStore = transaction.objectStore("users");   // obținem magazinul users

Trebuie menționat că magazinul trebuie să fie creat anterior cu ajutorul metodei createObjectStore() a obiectului IDBDatabase. Crearea unui magazin se poate face la crearea sau modificarea versiunii bazei de date:

const request = indexedDB.open("test", 5); // ne conectăm la bd test

request.onupgradeneeded = (event) => {
   const db = event.target.result;  
   if (db.objectStoreNames.contains("users")) {
       db.deleteObjectStore("users");  
   }
   const userStore = db.createObjectStore("users", { keyPath: "id", autoIncrement: true });
   console.log(userStore);
};

request.onsuccess = (event) => {
   const db = event.target.result;  
   const transaction = db.transaction(["users"], "readwrite");
   const userStore = transaction.objectStore("users");  
   console.log(userStore);
};

Tipul IDBObjectStore oferă următoarea serie de metode pentru operații asupra datelor din magazin:

  • add - adaugă noi obiecte în magazin
  • clear - curăță magazinul șterge toate obiectele
  • count - returnează numărul total de obiecte
  • createIndex - creează un nou index
  • delete - șterge din magazin obiectul cu cheia specificată
  • deleteIndex - șterge indexul specificat
  • get - returnează obiectul cu cheia specificată
  • getKey - returnează cheia obiectului
  • getAll - returnează toate obiectele din magazin
  • getAllKeys - returnează cheile obiectelor
  • index - returnează indexul magazinului
  • openCursor - este folosit pentru a itera prin magazinul de obiecte pe baza cheii primare cu ajutorul unui cursor
  • openKeyCursor - returnează un cursor pentru a itera prin magazinul de obiecte
  • put - actualizează obiectele existente în magazin
← Lecția anterioară Lecția următoare →