Все операции с базой данных 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(): обновляет существующие объекты в хранилище