Выполнение запросов к базе данных

Последнее обновление: 11.11.2023

Все операции с базой данных IndexDB инкапсулируются в транзакции, которые представляют тип IDBTransaction. Для создания объектов этого типа у объекта базы данных IDBDatabase вызывается метод transaction():

transaction(storeNames)
transaction(storeNames, mode)

Этот метод принимает следующие параметры:

  • storeNames: массив имен хранилищ объектов, к которым осуществляется доступ в транзакции.

    const request = indexedDB.open("test", 3); // подключаемся к бд test
    
    request.onsuccess = (event) => { 
        const db = event.target.result;  // получаем бд
        // создаем транзакцию
        const transaction = db.transaction("users");    // обращаемся к хранилищу "users"
        console.log(transaction);
    };
    

    Если надо задействовать несколько хранилищ, то они определяются в виде массива:

    const transaction = db.transaction(["users", "companies"]); // обращаемся к хранилищам "users" и "companies"
    

    Если надо указать все хранилища объектов базы данных, то можно использовать свойство IDBDatabase.objectStoreNames:

    const transaction = db.transaction(db.objectStoreNames);
  • mode: необязательный параметр, устанавливает тип доступа к базе данных. Может принимать следующие значения:

    • readonly: данные доступны только для чтения. Данное значение используется по умолчанию, если параметр mode не указан явным образом.

    • readwrite: данные доступны как для чтения, так и для записи

    • versionchange: разрешены чтение и запись, а также операции по удалению или созданию хранилищ и индексов объектов.

    Пример применения:

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

С помощью свойств IDBTransaction можно некоторую информацию о транзакции:

  • db: объект базы данных (IDBDatabase)

  • error: информация об ошибке в виде объекта DOMException

  • mode: режим доступа к базе данных, если не установлен, то по умолчанию readonly

  • objectStoreNames: список задействованных в транзакции хранилищ (объект DOMStringList), где каждое хранилище представляет объект IDBObjectStore

Например, получение данных:

const request = indexedDB.open("test", 3); // подключаемся к бд test

request.onsuccess = (event) => { 
    const db = event.target.result;  // получаем бд
    // создаем транзакцию
    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}
};

Получение хранилища

Для выполнения собственно операций с хранилищем в рамках транзакции применяются различные методы объекта IDBObjectStore, который и представляет собой хранилище. Для получения объекта IDBObjectStore у объекта транзакции IDBTransaction вызывается метод objectStore():

const userStore = transaction.objectStore("users");   // получаем хранилище users

Следует отметить, что хранилище должны быть ранее создано с помощью метода createObjectStore() объекта IDBDatabase. Создать хранилище, например, можно при создании или изменении версии базы данных:

const request = indexedDB.open("test", 5); // подключаемся к бд test

// при создании или изменении версии базы данных создаем в ней хранилище
request.onupgradeneeded = (event) => { 
    const db = event.target.result;  // получаем бд
    // пересоздаем хранилище 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");   // получаем хранилище users
    console.log(userStore);
};

Тип IDBObjectStore предоставляет следующий ряд методов для операций над данными в хранилище:

  • add(): добавляет новые объекты в хранилище

  • clear(): очищает хранилище (удаленяет все объекты)

  • count(): возвращает общее количество объектов

  • createIndex(): создает новый индекс

  • delete(): удаляет из хранилища объект с определенным ключом

  • deleteIndex(): удаляет указанный индекс

  • get(): возвращает объект c указанным ключом

  • getKey(): возвращает ключ объекта

  • getAll(): возвращает все объекты из хранилища

  • getAllKeys(): возвращает ключи объектов

  • index(): возвращает индекс хранилища

  • openCursor(): используется для перебора хранилища объектов по первичному ключу с помощью курсора

  • openKeyCursor(): возвращает курсор для перебора хранилища объектов

  • put(): обновляет существующие объекты в хранилище

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850